如何重新分区pyspark数据帧?

时间:2017-08-23 16:10:01

标签: machine-learning pyspark spark-dataframe bigdata

data.rdd.getNumPartitions() # output 2456

然后我做了     data.rdd.repartition(3000)
    data.rdd.getNumPartitions()#输出仍为2456

如何更改分区数。一种方法可以是首先将DF转换为rdd,重新分区然后将rdd转换回DF。但这需要很多时间。 越来越多的分区是否使操作更加分散,因此更快? 谢谢

3 个答案:

答案 0 :(得分:11)

您可以查看分区数:

data.rdd.partitions.size

更改分区数:

newDF = data.repartition(3000)

您可以查看分区数:

newDF.rdd.partitions.size

在重新分区时要小心数据随机播放,这很昂贵。如果需要,请查看coalesce

答案 1 :(得分:2)

print df.rdd.getNumPartitions()
# 1


df.repartitions(5)
print df.rdd.getNumPartitions()
# 1


df = df.repartitions(5)
print df.rdd.getNumPartitions()
# 5

请参阅火花:权威指南第5章-基本结构操作
ISBN-13:978-1491912218
ISBN-10:1491912219

答案 2 :(得分:1)

如果要增加分区数,可以使用repartition()

data = data.repartition(3000)

如果您想减少分区数,我建议您使用coalesce(),这样可以避免完全洗牌:

  

用于过滤掉较大的内容后更有效地运行操作   数据集。

data = data.coalesce(10)