如何转换 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 数据框以使我的值成为列名? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何使我的代码成为可重用的组件?

如何将spark数据帧列名和行数据转换为json数据

需要一些帮助来创建一个 cmake 文件以使我的项目正常工作...从 cmake 转换

Spark:嵌套的 json 数据和重复的列名(pyspark)

如何创建一个 Spark 数据框以从 np.arrays 列表(由 RDKit 生成)提供给 sparks 随机森林实现?

如果我调用 Factory.build 以使我的控制器测试快速,如何让 Factory Girl 永远不会访问数据库?