Scala代码实现列出Hadoop 文件夹下面的所有文件

本文介绍了一个使用Java实现的递归方法,用于在Hadoop文件系统中遍历指定目录下的所有文件及子目录,并打印出每个文件的完整路径。适用于Hadoop环境下文件管理与数据收集的需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

列出Hadoop文件夹下面的所有文件,如果子文件是一个文件夹,则递归列出里面的文件,返回一个Path数组。

import java.io.IOException
import org.apache.hadoop.fs.{FileSystem, FileStatus, Path}
import org.apache.hadoop.conf.Configuration

object FullFile {


  @throws[IOException]
  def recursiveListFiles(status :FileStatus,  fs: FileSystem): Array[Path] = {
    var fileArray = Array[Path]()
    val inputPath = new Path(status.getPath.toString)
    val fs = inputPath.getFileSystem(new Configuration())
    val statuses = fs.listStatus(inputPath)
    for (s <- statuses) {
      if (s.isDirectory) {
        fileArray = fileArray ++: recursiveListFiles(s, fs)
      } else if (s.isFile) {
        fileArray = fileArray :+ s.getPath
      }
    }
    for (f <- fileArray) {println(f.toString)}
    fileArray
  }

  def main(args: Array[String]) {
    val conf = new Configuration()
    val fs = FileSystem.get(conf)
    val fileStatus = fs.getFileStatus(new Path(args(0)))
     recursiveListFiles(fileStatus,fs)

  }
}


转载于:https://my.oschina.net/duanfangwei/blog/544240

【实验目的】 (1)掌握使用 Spark 访问本地文件HDFS 文件的方法。 (2)掌握 Spark 应用程序的编写、编译和运行方法。 【实验平台】 (1) 操作系统: Ubuntu 16.04。 (2) Spark 版本: 3.4.0。 (3) Hadoop 版本: 3.3.5。 【实验内容】 1.Spark读取文件系统的数据 (1)在spark-shell中读取Linux系统本地文件“/home/hadoop/test.txt”,然后统计出文件的行数; (2)在spark-shell中读取HDFS系统文件“/user/hadoop/test.txt”(如果该文件不存在,请先创建),然后,统计出文件的行数; (3)编写独立应用程序(推荐使用Scala语言),读取HDFS系统文件“/user/hadoop/test.txt”(如果该文件不存在,请先创建),然后,统计出文件的行数;通过sbt工具将整个应用程序编译打包成 JAR包,并将生成的JAR包通过 spark-submit 提交到 Spark 中运行命令。 SimpleApp.scala文件代码内容如下所示: simple.sbt文件代码如下: 使用、usr/local/sbt/sbt package命令将以上代码文件夹打jar包,打包完成后可看到打包成功的输出,如下图: 运行打好的jar包,使用命令/usr/local/spark/bin/spark-submit --class “SimpleApp” /usr/local/spark/mycode/HDFStest/target/scala-2.11/a-simple-hdfs-test_2.11-1.0.jar即可,如下: 2.编写独立应用程序实现数据去重 对于两个输入文件 A 和 B,编写 Spark 独立应用程序(推荐使用 Scala 语言),对两个文件进行合并,并剔除其中重复的内容,得到一个新文件 C。下面是输入文件和输出文件的一个样例,供参考。 输入文件 A 的样例如下: 20170101 x 20170102 y 20170103 x 20170104 y 20170105 z 20170106 z 输入文件 B 的样例如下: 20170101 y 20170102 y 20170103 x 20170104 z 20170105 y 根据输入的文件 A 和 B 合并得到的输出文件 C 的样例如下: 20170101 x 20170101 y 20170102 y 20170103 x 20170104 y 20170104 z 20170105 y 20170105 z 20170106 z RemDup.scala文件代码内容如下所示: 创建simple.sbt文件并向其中输入代码,使用命令/usr/local/sbt/sbt package 将代码文件夹打包,打包成功后结果如下: 再使用命令/usr/local/spark/bin/spark-submit --class "RemDup" /home/hadoop/sparkapp2/RemDup/target/scala-2.11/remove-duplication_2.11-1.0.jar 即可运行,结果如下 3.编写独立应用程序实现求平均值问题 每个输入文件表示班级学生某个学科的成绩,每行内容由两个字段组成,第一个是学生名字,第二个是学生的成绩;编写 Spark 独立应用程序求出所有学生的平均成绩,并输出到一个新文件中。下面是输入文件和输出文件的一个样例,供参考。 Algorithm 成绩: 小明 92 小红 87 小新 82 小丽 90 Database 成绩: 小明 95 小红 81 小新 89 小丽 85 Python 成绩: 小明 82 小红 83 小新 94 小丽 91 平均成绩如下: (小红,83.67) (小新,88.33) (小明,89.67) (小丽,88.67) 创建代码文件夹,并创建存放成绩数据的文件夹datas,使用vim命令向其中添加题示数据: 运行jar包,使用命令/usr/local/spark/bin/spark-submit --class "AvgScore" /home/hadoop/sparkapp3/AvgScore/target/scala-2.11/average-score_2.11-1.0.jar 得到运行结果,每个学生的平均成绩如下: 【实验问题与解决】
最新发布
06-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值