【问题标题】:Spark - Transpose DataFrame Columns [duplicate]Spark - 转置 DataFrame 列 [重复]
【发布时间】:2018-10-24 10:45:06
【问题描述】:

我有一个如下所示的表格:

ID     Type      5m      10m     15m
1      A         3       9       13
1      B         7       8       22
1      C         5       11      13
2      A         1       3       20
2      B         16      17      30
...

如果可能,我想按以下格式创建新列:

ID     A_5m     A_10m     A_15m    B_5m    B_10m     B_15m     C_5m     C_10m     C_15m

我目前正在引用以下 SO:How to transpose/pivot the rows data to column in Spark Scala?

它对创建新列很有用:A B,但是在创建类型和距离时我迷失了。

有什么想法吗?

【问题讨论】:

    标签: scala apache-spark dataframe transpose


    【解决方案1】:

    它对创建新列有好处:A B,但是在创建类型和距离时我迷路了。

    没有什么不同。您可以在单个数据透视表中应用多个聚合:

    val df = Seq(
       (1, "A", 3 , 9 , 13), (1, "B", 7 , 8 , 22),(1, "C", 5 , 11, 13),
       (2, "A", 1 , 3 , 20), (2, "B", 16, 17, 30)
    ).toDF("id", "type", "5m", "10m", "15m")
    
    df.groupBy("id").pivot("type").agg(
      first("5m") as "5m", first("10m") as "10m", first("15m") as "15m"
    ).show
    +---+----+-----+-----+----+-----+-----+----+-----+-----+ 
    | id|A_5m|A_10m|A_15m|B_5m|B_10m|B_15m|C_5m|C_10m|C_15m|
    +---+----+-----+-----+----+-----+-----+----+-----+-----+
    |  1|   3|    9|   13|   7|    8|   22|   5|   11|   13|
    |  2|   1|    3|   20|  16|   17|   30|null| null| null|
    +---+----+-----+-----+----+-----+-----+----+-----+-----+
    

    Spark 将根据基本名称和级别自动生成名称。

    【讨论】:

      猜你喜欢
      • 2019-02-23
      • 2016-02-22
      • 2021-12-18
      • 2018-06-26
      • 2018-10-21
      • 2016-02-20
      • 2019-10-22
      • 2020-03-18
      • 1970-01-01
      相关资源
      最近更新 更多