PySpark 中的 Spark 聚合,如果可能,不会再发生混洗操作

Spark aggregation in PySpark, if possible without incurring anymore shuffling operation

有没有办法在 pyspark 中隐藏我的 df,它看起来像,

df = sc.parallelize([
    ['Naman', True,200],
    ['Jason', True,100],
    ['Jason', False,200],
    ['Omar', True,100],
    ['Omar', False,200],
    ['Omar', True,200],
    ['Naman', False,200]
]).toDF(('emp_name', 'class','score'))

df.show()

如果没有 groupby 可能的话,但是,它已经聚合在唯一的 class 和 emp_name 级别,我只是想创建一个额外的列并减少 emp_name 行达到独一无二的水平。

+--------+-----------+-----------+
|emp_name|class1Score|class2Score|
+--------+-----------+-----------+
|   Naman|        200|        200|
|   Jason|        100|        200|
|    Omar|        200|        200|
+--------+-----------+-----------+

除非数据已经被 emp_name 分区(在你的情况下它不是,并且这样的分区需要随机播放)或者数据是从 table 中加载的 emp_name (与以前一样)将数据重塑为所需的格式,例如使用 pivot

df.groupBy("emp_name").pivot("class", [True, False]).sum()

需要洗牌。