PySpark中使用pivot()出现异常输出的原因咨询
为什么pivot会生成宽表而非简洁结果
你的问题核心是没搞清楚pivot的作用逻辑,和普通分组聚合的区别:
普通分组聚合(groupBy+sum):
df.groupBy("_c0").sum("_c1")是按_c0分组,直接把每个分组里所有_c1的值加总,结果只有_c0和sum(_c1)两列,结构自然简洁。pivot的作用逻辑:
df.groupBy("_c0").pivot("_c1").sum("_c1")的执行步骤是:- 先按
_c0分组 - 把
_c1列的每一个唯一值都单独作为新的列名 - 对每个分组内,对应
_c1值的行,计算_c1的总和(这里你sum的是_c1本身,结果就是该_c1值本身,逻辑虽没必要,但不影响pivot的行为)
- 先按
当_c1的唯一值数量很多时,pivot就会把这些值全部展开成列,自然生成异常宽的表——这完全是pivot的设计特性,它就是用来做“行转列”操作的。
如果想避免生成宽表,要么直接用普通的groupBy+sum,要么在调用pivot时指定要保留的列,比如只展开几个特定的_c1值:
df.groupBy("_c0").pivot("_c1", ["242", "302"]).sum("_c1").show()
内容的提问来源于stack exchange,提问作者Nifty
相关产品推荐
相关产品推荐

