我在读取sparkDataframe时发现了这个奇怪的问题。我将Dataframe重新划分为50k个分区。但是,当我读取并对Dataframe执行计数操作时,我发现在使用spark 2.0时,底层rdd只有2143个分区。
所以我去了保存重新分区数据的路径,发现
hfs -ls /repartitionedData/ | wc -l
50476
因此,它在保存数据的同时创建了5万个分区。
但是在spark 2.0中,
val d = spark.read.parquet("repartitionedData")
d.rdd.getNumPartitions
res4: Int = 2143
但Spark1.5,
val d = spark.read.parquet("repartitionedData")
d.rdd.partitions.length
res4: Int = 50474
有人能帮我吗?
1条答案
按热度按时间s2j5cfk01#
这并不是说您正在丢失数据,而是仅仅更改分区的数量。filesourcestrategy将Parquet文件组合到更少的分区中,并对数据进行重新排序。
当spark升级到新版本时,这种情况发生了变化
2.0
. 你可以在这里找到一些相关的bug报告。