通常我们会使用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
赞 (127)
打赏 微信扫一扫
DeepMind改进的Google Play Store推荐系统要点解析
« 上一篇2020-01-07 13:19:21
云会“杀死”运维吗?解读运维的云上发展
下一篇 »2020-01-07 13:34:18