apache-spark - 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)
解决方案
在 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 列中选择ws
到df1
。
然后它df1
使用 D 列重新分区到df2
. 基本上,分区意味着您的数据帧在内存/存储中的分布方式,并直接影响它的并行处理方式。如果您想了解有关重新分区数据帧的更多信息,可以转到https://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.DataFrame.repartition
推荐阅读
- android - RecyclerView 滚动性能缓慢,并且在滚动时有时会延迟/停止
- oauth-2.0 - 通过 axios 中的拦截器自动刷新访问令牌
- pyspark - 导出到 S3 时出现 AWS EMR 错误:找不到类 com.amazon.ws.emr.hadoop.fs.EmrFileSystem
- c# - Unity:检测玩家是否在一个区域内
- javascript - 如何在本机反应中延迟获取请求上的组件渲染?
- c# - 将具有重复关系实体的反序列化实体附加到 DbContext
- angular - Angular 5 应用程序抛出 HTTP 错误 404.0 - 经 IdengtityServer 4 授权后未找到
- java - 懒惰的@OneToOne
- activiti - activiti servicetask delegateExpression错误
- javascript - 在js中隐藏外部世界的变量值