首页 > 科技 > Spark中并行读取多个文件

Spark中并行读取多个文件

通常我们会使用textFile()和wholeTextFile()方法读取本地文件系统和hdfs上的文件,或者任意Hadoop支持的文件系统,他们都支持并行读取多个文件,可是你知道他们的区别吗?

sc.textFile 读取特定文件路径中的所有文件 ,并且为每个文件建立一个分区,例如有5个文件被读入,那么rdd就包含5个分区。(如果是从hdfs读取数据,分区数和block数量相关)

注: 以下代码使用pyspark完成

t>> path= "/data/*.csv" #目录中包含5个csv文件
t>> rdd2 = sc.textFile(path)
t>> rdd2.getNumPartitions()
t5

sc.WholeTextFiles() 读取特定路径中的所有文件,并且返回一个PairRDD,PairRDD包含一个 文件路径的key和文件内容作为value,rdd分区数由任务的executors的数目来决定。 你也可以通过传递给WholeTextFiles一个特定分区数来改变默认分区。

t>> path= "/data/*.csv" #目录中包含5个csv文件
t>> rdd1 = sc.wholeTextFiles(path,3)
t>> rdd1.getNumPartitions()
t3

另外,分区数还受其他几个参数的影响,比如 sc.defaultMinPartitions 以及 hdfs的block size ,使用时要注意匹配使用。

本文来自投稿,不代表本人立场,如若转载,请注明出处:http://www.souzhinan.com/kj/278035.html