pyspark 中的 windowPartitionBy 和重新分区

windowPartitionBy and repartition in pyspark

我在 SparkR 中有一小段代码,我想将其转换为 pyspark。我不熟悉这个windowPartitionBy,和repartition。你能帮我了解这段代码的作用吗?

ws <- orderBy(windowPartitionBy('A'),'B')
df1 <- df %>% select(df$A, df$B, df$D, SparkR::over(lead(df$C,1),ws))
df2 <- repartition(col = df1$D)

在 pyspark 中相当于:

from pyspark.sql import functions as F, Window
ws = Window.partitionBy('A').orderBy('B')
df1 = df.select('A', 'B', 'D', F.lead('C', 1).over(ws))
df2 = df1.repartition('D')

代码是从 df 中选择 window ws 中下一行的 A、B、D 列和 C 列到 df1 中。

然后使用 D 列将 df1 重新分区为 df2。基本上,分区意味着您的数据帧如何分布在 memory/storage 中,并且直接影响它的并行处理方式。如果您想了解有关重新分区数据帧的更多信息,可以转到https://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.DataFrame.repartition