如何为PySpark的Window函数设置分区



我正在运行PySpark作业,收到以下消息:

WARN org.apache.spark.sql.execution.Window: No Partition Defined for Window operation! Moving all data to a single partition, this can cause serious performance degradation.

该消息指示了什么,以及如何为Window操作定义分区?

编辑:

我正试着在整个专栏中排名。

我的数据组织为:

A
B
A
C
D

我想要:

A,1
B,3
A,1
C,4
D,5

我认为不应该有.partitionBy[(],而应该只有.orderBy[()]。问题是,这似乎会导致性能下降。有没有其他方法可以在没有窗口功能的情况下实现这一点?

如果我按第一列进行分区,结果将是:

A,1
B,1
A,1
C,1
D,1

我不想要。

给定问题的信息,我最多可以提供一个关于如何在Window函数上定义分区的框架:

from pyspark.sql.window import Window
windowSpec = 
     Window 
     .partitionBy(...)  # Here is where you define partitioning
     .orderBy(…)

这相当于以下SQL:

OVER (PARTITION BY ... ORDER BY …)

关于分区规范

它控制将在与给定行相同的分区。在对帧进行排序和计算之前,您可能需要确保分区列具有相同值的所有行都被收集到同一台机器上。

如果您没有给出任何分区规范,那么所有数据都必须收集到一台机器上,因此会出现以下错误消息:

WARN org.apache.spark.sql.execution.Window: No Partition Defined for Window operation! Moving all data to a single partition, this can cause serious performance degradation.

相关内容

  • 没有找到相关文章

最新更新