csh*_*in9 4 apache-spark apache-spark-sql pyspark google-cloud-dataproc
我正在运行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.
Run Code Online (Sandbox Code Playgroud)
该消息表示什么,以及如何为Window操作定义分区?
编辑:
我正在尝试对整列进行排名。
我的数据组织为:
A
B
A
C
D
Run Code Online (Sandbox Code Playgroud)
而且我要:
A,1
B,3
A,1
C,4
D,5
Run Code Online (Sandbox Code Playgroud)
我不认为应该只有.orderBy()来使用.partitionBy()。问题是,这似乎导致性能下降。没有Window功能,还有另一种方法可以实现这一点吗?
如果按第一列划分,结果将是:
A,1
B,1
A,1
C,1
D,1
Run Code Online (Sandbox Code Playgroud)
我不要。
在给出问题信息的情况下,我最多只能提供有关如何在Window函数上定义分区的框架:
from pyspark.sql.window import Window
windowSpec = \
Window \
.partitionBy(...) \ # Here is where you define partitioning
.orderBy(…)
Run Code Online (Sandbox Code Playgroud)
这等效于以下SQL:
OVER (PARTITION BY ... ORDER BY …)
Run Code Online (Sandbox Code Playgroud)
所以关于分区规范:
它控制哪些行将与给定行位于同一分区中。您可能需要确保在订购和计算框架之前,将分区列具有相同值的所有行都收集到同一台计算机上。
如果您未提供任何分区规范,则必须将所有数据收集到一台计算机上,因此出现以下错误消息:
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.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4645 次 |
| 最近记录: |