我正在寻找如何重新分区(在PySpark中)一个数据集,以便指定列中具有相同ID的所有行都移动到同一个分区。实际上,我必须在每个分区中运行一个程序,该程序为具有相同ID的所有行计算单个值。
我有一个从HIVE QL查询构建的数据帧(df)(假设包含10000个不同的ID)。 我试过了:
df = df.repartition("My_Column_Name")
默认情况下,我获得了200个分区,但总是获得199个ID,当我运行程序时,我获得了重复的计算值。
我查看了网络,有些人建议定义一个自定义分区程序以与repartition
方法一起使用,但我无法在Python中找到如何执行此操作。
有没有办法正确地进行这种重新分配?
答案 0 :(得分:0)
我只希望将具有相同ID的所有行移动到同一分区。如果分区包含具有不同ID的几组行,则没有问题。 1000只是一个例子,不同ID的数量可以非常高。因此,将DF划分为多个不同的ID分区不应该导致良好的性能。我需要这个,因为我使用RDD mapPartition方法运行一个函数(使用基本的Spark转换函数无法实现)。此函数为每个不同的ID生成一个结果,这就是为什么我需要在同一个分区中拥有所有具有相同ID的行。