通常我们会使用textFile()和wholeTextFile()方法读取本地文件系统和hdfs上的文件,或者任意Hadoop支持的文件系统,他们都支持并行读取多个文件,可是你知道他们的区别吗?
读取特定文件路径中的所有文件 ,并且为每个文件建立一个分区,例如有5个文件被读入,那么rdd就包含5个分区。(如果是从hdfs读取数据,分区数和block数量相关)
注: 以下代码使用pyspark完成
>> path= "/data/*.csv" #目录中包含5个csv文件 >> rdd2 = (path) >> rdd2.getNumPartitions() 5() 读取特定路径中的所有文件,并且返回一个PairRDD,PairRDD包含一个 文件路径的key和文件内容作为value,rdd分区数由任务的executors的数目来决定。 你也可以通过传递给WholeTextFiles一个特定分区数来改变默认分区。
>> path= "/data/*.csv" #目录中包含5个csv文件 >> rdd1 = (path,3) >> rdd1.getNumPartitions() 3另外,分区数还受其他几个参数的影响,比如 以及 hdfs的block size ,使用时要注意匹配使用。