如何使用spark并行读取目录中的文件

时间:2017-03-28 03:47:26

标签: apache-spark

如何使用spark

并行读取目录中的文件

我是sc.textfile但它按顺序读取每个文件

2 个答案:

答案 0 :(得分:1)

您需要了解sc.textFilesc.WholeTextFiles之间的区别 sc.textFile读取给定目录中的所有文件,并创建一个分区作为文件号。如果有5个文件,那么它会创建5个分区。

sc.WholeTextFiles读取给定目录中的所有文件并创建一个PairRDD,其中文件路径作为键,文件内容作为值。分区取决于执行程序的数量

答案 1 :(得分:0)

Spark可以并行读取目录中的文件。

为此你需要使用sc.wholeTextFiles

它将从HDFS读取文本文件目录,本地文件系统(在所有节点上都可用)或任何支持Hadoop的文件系统URI。每个文件都作为单个记录读取,并以键值对的形式返回,其中键是每个文件的路径,值是每个文件的内容。

例如,如果您有以下文件:

hdfs://a-hdfs-path/file1.txt
hdfs://a-hdfs-path/file2.txt
...
hdfs://a-hdfs-path/fileN.txt

执行val rdd = sparkContext.wholeTextFile(" hdfs:// a-hdfs-path"),

然后rdd包含

(a-hdfs-path/file1.txt, its content)
(a-hdfs-path/file2.txt, its content)
...
(a-hdfs-path/fileN.txt, its content)

注意 - 在某些文件系统上,.../path/*可以更有效地读取目录中的所有文件,而不是.../path/.../path。小文件是首选,大文件也是允许的,但可能会导致性能不佳。