【问题标题】:spark retain all the columns of orginal data frame after pivotspark在pivot之后保留原始数据框的所有列
【发布时间】:2018-10-22 17:26:51
【问题描述】:

我有一个数据框,它有很多列,近 50 多列(如下所示),

+----+----+---+----+----+---+----+---+----+----+---+...
|c1  |c2  |c3 |c4  |c5  |c6  |c7 |c8 |type|clm |val |...
+----+----+---+----+----+---+----+---+----+----+---+...
|  11| 5.0|3.0| 3.0| 3.0|4.0| 3.0|3.0| t1 | a  |5   |...
+----+----+---+----+----+---+----+---+----+----+---+...
|  31| 5.0|3.0| 3.0| 3.0|4.0| 3.0|3.0| t2 | b  |6   |...
+----+----+---+----+----+---+----+---+----+----+---+...
|  11| 5.0|3.0| 3.0| 3.0|4.0| 3.0|3.0| t1 | a  |9   |...
+----+----+---+----+----+---+----+---+----+----+---+...

我想将一列值转换为多列,所以想使用下面的代码

df.groupBy("type").pivot("clm").agg(first("val")).show() 

这是将行值转换为列,但其他列(c1 到 c8)不会作为结果数据框的一部分出现。

那么可以用下面的方法来获取pivot之后的所有cloumns

df.groupBy("c1","c2","c3","c4","c5","c6","c7","c8","type").pivot("clm") .agg(first("val")).show()

【问题讨论】:

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


    【解决方案1】:

    pivot 与其他聚合器一样被视为聚合器。

    df
      .groupBy("type")
      .agg(
        pivot("clm").first("val"),
        first("c1"),
        first("c2"),
        first("c3"),
        first("c4"),
        first("c5"),
        first("c6"),
        first("c7"),
        first("c8")
      ).show()
    

    这样写假设您在同一个type 中有重复的c1..c8 值。如果不是,则需要调整 .groupby(...) 以准确了解您的数据的组织方式。

    【讨论】:

      猜你喜欢
      • 2021-03-12
      • 2023-02-16
      • 2013-10-10
      • 1970-01-01
      • 2018-08-19
      • 2019-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多