Scala 使用pivot旋转单行Spark数据帧
我是spark的新手,我希望使用scala将数据帧的一行作为轴,如下所示:Scala 使用pivot旋转单行Spark数据帧,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,我是spark的新手,我希望使用scala将数据帧的一行作为轴,如下所示: +--------------+-------+-------+-------+-------+-------+-------+-------+ | Country| 3/7/20| 3/8/20| 3/9/20|3/10/20|3/11/20|3/12/20|3/13/20| +--------------+-------+-------+-------+-------+-------+-------+--
+--------------+-------+-------+-------+-------+-------+-------+-------+
| Country| 3/7/20| 3/8/20| 3/9/20|3/10/20|3/11/20|3/12/20|3/13/20|
+--------------+-------+-------+-------+-------+-------+-------+-------+
| Japan| 0| 4| 10| 18| 27| 31| 35|
+--------------+-------+-------+-------+-------+-------+-------+-------+
我的数据透视框应该如下所示
+--------------+-------+
| Country| Japan |
+--------------+-------+
| 3/7/20| 0|
+--------------+-------+
| 3/8/20| 4|
+--------------+-------+
| 3/9/20| 10|
+--------------+-------+
| 3/10/20| 18|
+--------------+-------+
| ...| ...|
+--------------+-------+
我已尝试使用以下方法,但我不确定是否正确获得聚合表达式:
val pivoted = df.groupBy("Country").pivot("Country", Seq("Japan")).agg(col("Country"))
试试这个-
使用堆栈
df2.show(false)
df2.printSchema()
/**
* +-------+------+------+------+-------+-------+-------+-------+
*|国家| 3/7/20 | 3/8/20 | 3/9/20 | 3/10/20 | 3/11/20 | 3/12/20 | 3/13/20|
* +-------+------+------+------+-------+-------+-------+-------+
*|日本| 0 | 4 | 10 | 18 | 27 | 31 | 35|
* +-------+------+------+------+-------+-------+-------+-------+
*
*根
*|--Country:string(nullable=true)
*|--3/7/20:整数(可为空=真)
*|--3/8/20:整数(可为空=真)
*|--3/9/20:整数(可为空=真)
*|--3/10/20:整数(可为空=真)
*|--3/11/20:整数(可为空=真)
*|--3/12/20:整数(可为空=真)
*|--3/13/20:整数(可为空=真)
*/
val stringCol=df2.columns.map(c=>s“'$c',cast(`c`as string)”).mkString(“,”)
val processedDF=df2.selectExpr(s“stack(${df2.columns.length},$stringCol)as(col_1,col_2)”)
processedDF.show(false)
/**
* +-------+-----+
*|第1列|第2列|
* +-------+-----+
*|国家|日本|
* |3/7/20 |0 |
* |3/8/20 |4 |
* |3/9/20 |10 |
* |3/10/20|18 |
* |3/11/20|27 |
* |3/12/20|31 |
* |3/13/20|35 |
* +-------+-----+
*/