首页 > 解决方案 > pyspark中的windowPartitionBy和重新分区

问题描述

我在 SparkR 中有一个小代码,我想将它转换为 pyspark。我不熟悉这个windowPartitionBy,并重新分区。你能帮我了解这段代码在做什么吗?

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)

标签: apache-sparkpysparkapache-spark-sqlsparkr

解决方案


在 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窗口中的下一行的 A、B、D 列和 C 列中选择wsdf1

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


推荐阅读