arrays - 生成涉及 Array、Pivot 的复杂 Pyspark 表
问题描述
我有以下格式的表格
+-------+--------+
|Column1|Column2 |
+-------+--------+
|[A, 1] |X |
|[A, 1] |Y |
|[B, 2] |Y |
|[B, 2] |Z |
|[C, 1] |X |
|[C, 1] |Z |
+-------+--------+
我需要一个具有以下结果的表:
+-------+-------+-------+-------+
| |[A, 1] |[B, 2] |[C, 1] |
+-------+-------+-------+-------+
|[A, 1] |[X, Y] |[Y] |[X] |
|[B, 2] |[Y] |[Y, Z] |[Z] |
|[C, 1] |[X] |[Z] |[X, Z] |
+-------+-------+-------+-------+
或者更好的是这样的结果:
+-------+-------+-------+-------+
| |[A, 1] |[B, 2] |[C, 1] |
+-------+-------+-------+-------+
|[A, 1] |2 |1 |1 |
|[B, 2] |1 |2 |1 |
|[C, 1] |1 |1 |2 |
+-------+-------+-------+-------+
解决方案
这将是昂贵的,特别是对于大数据,但你可以这样做join
+ pivot
:
from pyspark.sql.functions import count
df.alias("l").join(df.alias("r"), on="Column2")\
.select("l.Column1", "r.Column1")\
.groupBy("l.Column1")\
.pivot("r.Column1")\
.agg(count("r.Column1"))\
.show()
#+-------+------+------+------+
#|Column1|[A, 1]|[B, 2]|[C, 1]|
#+-------+------+------+------+
#| [A, 1]| 2| 1| 1|
#| [B, 2]| 1| 2| 1|
#| [C, 1]| 1| 1| 2|
#+-------+------+------+------+
推荐阅读
- django - django 模型 - 避免数据库设计中可能的循环引用
- c - 为什么在这种情况下需要取消对 char 的引用?
- mongodb - 为什么它为0时不显示值?
- java - 数组子集不等和
- c# - 如何修复“System.Data.OleDb.OleDbException:'UPDATE 语句中的语法错误。'”?
- c# - 无法将 DataTemplateColumn 元素绑定到另一个 DataTemplateColumn
- php - 当我尝试在 Symfony 中放置带有 URL 的图像时出现状态 403
- azure - 如何在 kusto / Azure 应用程序洞察中访问子查询中的外列?
- java - ConnectException:连接被拒绝:连接
- android - 错误:无法启动守护进程。VM 初始化期间发生错误无法为 1572864KB 对象堆保留足够的空间