我是spark
和scala
的新手。我有以下要求。我需要处理具有子目录的路径下的所有文件。我想,我需要编写一个for循环逻辑来处理所有文件。
以下是我的案例:
src/proj_fldr/dataset1/20170624/file1.txt
src/proj_fldr/dataset1/20170624/file2.txt
src/proj_fldr/dataset1/20170624/file3.txt
src/proj_fldr/dataset1/20170625/file1.txt
src/proj_fldr/dataset1/20170625/file2.txt
src/proj_fldr/dataset1/20170625/file3.txt
src/proj_fldr/dataset1/20170626/file1.txt
src/proj_fldr/dataset1/20170626/file2.txt
src/proj_fldr/dataset1/20170626/file3.txt
src/proj_fldr/dataset2/20170624/file1.txt
src/proj_fldr/dataset2/20170624/file2.txt
src/proj_fldr/dataset2/20170624/file3.txt
src/proj_fldr/dataset2/20170625/file1.txt
src/proj_fldr/dataset2/20170625/file2.txt
src/proj_fldr/dataset2/20170625/file3.txt
src/proj_fldr/dataset2/20170626/file1.txt
src/proj_fldr/dataset2/20170626/file2.txt
src/proj_fldr/dataset2/20170626/file3.txt
我需要代码来迭代这些文件 在src
loop (proj_fldr
loop(dataset
loop(datefolder
loop(file1 then, file2....))))
答案 0 :(得分:0)
由于您有常规文件结构,因此在读取文件时可以使用通配符*
。您可以执行以下操作将所有文件读入单个RDD
:
val spark = SparkSession.builder.getOrCreate()
val rdd = spark.sparkContext.wholeTextFiles("src/*/*/*/*.txt")
结果将是RDD[(String, String)]
,其中包含每个已处理文件的元组中的路径和内容。
要明确设置是否要使用本地或HDFS文件,您可以附加" hdfs://"或" file://"到路径的开头。