根据特定专栏

时间:2018-05-22 12:32:54

标签: python apache-spark dataframe pyspark

我正在寻找如何重新分区(在PySpark中)一个数据集,以便指定列中具有相同ID的所有行都移动到同一个分区。实际上,我必须在每个分区中运行一个程序,该程序为具有相同ID的所有行计算单个值。

我有一个从HIVE QL查询构建的数据帧(df)(假设包含10000个不同的ID)。 我试过了:

df = df.repartition("My_Column_Name")

默认情况下,我获得了200个分区,但总是获得199个ID,当我运行程序时,我获得了重复的计算值。

我查看了网络,有些人建议定义一个自定义分区程序以与repartition方法一起使用,但我无法在Python中找到如何执行此操作。

有没有办法正确地进行这种重新分配?

1 个答案:

答案 0 :(得分:0)

我只希望将具有相同ID的所有行移动到同一分区。如果分区包含具有不同ID的几组行,则没有问题。 1000只是一个例子,不同ID的数量可以非常高。因此,将DF划分为多个不同的ID分区不应该导致良好的性能。我需要这个,因为我使用RDD mapPartition方法运行一个函数(使用基本的Spark转换函数无法实现)。此函数为每个不同的ID生成一个结果,这就是为什么我需要在同一个分区中拥有所有具有相同ID的行。