【问题标题】:How do I transform a Spark dataframe so that my values become column names? [duplicate]如何转换 Spark 数据框以使我的值成为列名? [复制]
【发布时间】: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]。

【问题讨论】:

    标签: scala apache-spark apache-spark-sql


    【解决方案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|
    +----+---+----+----+----+----+----+
    

    【讨论】:

      猜你喜欢
      • 2018-04-19
      • 2017-07-04
      • 2020-05-28
      • 2014-08-18
      • 2020-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多