在 Scala 中转置数据框
Transpose Dataframe in Scala
我有 dataframe
如下所示。
+---+------+------+
| ID|Field1|Field2|
+---+------+------+
| 1| x| n|
| 2| a| b|
+---+------+------+
我需要如下所示的输出
+---+-------------+------+
| ID| Fields|values|
+---+-------------+------+
| 1|Field1,Field2| x,n|
| 2|Field1,Field2| a,b|
+---+-------------+------+
我是 scala 的新手。我只需要一种方法来做到这一点。我已经在网上研究过转置,但找不到解决方案。
由于 Fields
列在每一行中都相同,您可以稍后添加。
在此示例中 class 事物有 3 个字段:id、Field1、Field2。
val sqlContext = new org.apache.spark.sql.SQLContext( sc )
import sqlContext.implicits._
import org.apache.spark.sql.functions._
val df =
sc
.parallelize( List( Thing( 1, "a", "b" ), Thing( 2, "x", "y" ) ) )
.toDF( "id", "Field1", "Field2" )
列名以相同的顺序返回,因此我们可以只取最后两个作为字段名
val fieldNames =
df
.columns
.takeRight( 2 )
org.apache.spark.sql.functions
完成所有合并给定列数据的工作。
val res =
df
.select( $"id", array( $"Field1", $"Field2" ) as "values" )
.withColumn( "Fields", lit( fieldNames ) )
res.show()
结果:
+---+------+----------------+
| id|values| Fields|
+---+------+----------------+
| 1|[a, b]|[Field1, Field2]|
| 2|[x, y]|[Field1, Field2]|
+---+------+----------------+
我有 dataframe
如下所示。
+---+------+------+
| ID|Field1|Field2|
+---+------+------+
| 1| x| n|
| 2| a| b|
+---+------+------+
我需要如下所示的输出
+---+-------------+------+
| ID| Fields|values|
+---+-------------+------+
| 1|Field1,Field2| x,n|
| 2|Field1,Field2| a,b|
+---+-------------+------+
我是 scala 的新手。我只需要一种方法来做到这一点。我已经在网上研究过转置,但找不到解决方案。
由于 Fields
列在每一行中都相同,您可以稍后添加。
在此示例中 class 事物有 3 个字段:id、Field1、Field2。
val sqlContext = new org.apache.spark.sql.SQLContext( sc )
import sqlContext.implicits._
import org.apache.spark.sql.functions._
val df =
sc
.parallelize( List( Thing( 1, "a", "b" ), Thing( 2, "x", "y" ) ) )
.toDF( "id", "Field1", "Field2" )
列名以相同的顺序返回,因此我们可以只取最后两个作为字段名
val fieldNames =
df
.columns
.takeRight( 2 )
org.apache.spark.sql.functions
完成所有合并给定列数据的工作。
val res =
df
.select( $"id", array( $"Field1", $"Field2" ) as "values" )
.withColumn( "Fields", lit( fieldNames ) )
res.show()
结果:
+---+------+----------------+
| id|values| Fields|
+---+------+----------------+
| 1|[a, b]|[Field1, Field2]|
| 2|[x, y]|[Field1, Field2]|
+---+------+----------------+