如何转换 Spark 数据框以使我的值成为列名? [复制]
Posted
技术标签:
【中文标题】如何转换 Spark 数据框以使我的值成为列名? [复制]【英文标题】:How do I transform a Spark dataframe so that my values become column names? [duplicate] 【发布时间】:2018-08-10 07:39:49 【问题描述】:我不确定用什么方法来表达这个问题,但举个例子会有所帮助。这是我的列数据框:名称、类型和计数:
+------+------+-------+
| Name | Type | Count |
+------+------+-------+
| a | 0 | 5 |
| a | 1 | 4 |
| a | 5 | 5 |
| a | 4 | 5 |
| a | 2 | 1 |
| b | 0 | 2 |
| b | 1 | 4 |
| b | 3 | 5 |
| b | 4 | 5 |
| b | 2 | 1 |
| c | 0 | 5 |
| c | ... | ... |
+------+------+-------+
我想获得一个像这样结构的新数据框,其中 Type 列值已成为新列:
+------+---+-----+---+---+---+---+
| Name | 0 | 1 | 2 | 3 | 4 | 5 | <- Number columns are types from input
+------+---+-----+---+---+---+---+
| a | 5 | 4 | 1 | 0 | 5 | 5 |
| b | 2 | 4 | 1 | 5 | 5 | 0 |
| c | 5 | ... | | | | |
+------+---+-----+---+---+---+---+
这里的列是 [Name,0,1,2,3,4,5]。
【问题讨论】:
【参考方案1】:通过使用 Spark 中的 pivot
函数来做到这一点。
val df2 = df.groupBy("Name").pivot("Type").sum("Count")
这里,如果两行的名称和类型相同,则计数值只是简单地相加,但其他聚合也是可能的。
使用问题中的示例数据时产生的数据框:
+----+---+----+----+----+----+----+
|Name| 0| 1| 2| 3| 4| 5|
+----+---+----+----+----+----+----+
| c| 5|null|null|null|null|null|
| b| 2| 4| 1| 5| 5|null|
| a| 5| 4| 1|null| 5| 5|
+----+---+----+----+----+----+----+
【讨论】:
以上是关于如何转换 Spark 数据框以使我的值成为列名? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
需要一些帮助来创建一个 cmake 文件以使我的项目正常工作...从 cmake 转换
Spark:嵌套的 json 数据和重复的列名(pyspark)
如何创建一个 Spark 数据框以从 np.arrays 列表(由 RDKit 生成)提供给 sparks 随机森林实现?