gpt4 book ai didi

scala - 使用spark scala将行转换为列

转载 作者:可可西里 更新时间:2023-11-01 16:28:05 25 4
gpt4 key购买 nike

我想使用 spark 数据框将行转换为列。

我的 table 是这样的

Eno,Name
1,A
1,B
1,C
2,D
2,E

我想把它转换成

Eno,n1,n2,n3
1,A,B,C
2,D,E,Null

我使用了下面的代码:-

val r = spark.sqlContext.read.format("csv").option("header","true").option("inferschema","true").load("C:\\Users\\axy\\Desktop\\abc2.csv")

val n =Seq("n1","n2","n3"

r
.groupBy("Eno")
.pivot("Name",n).agg(expr("coalesce(first(Name),3)").cast("double")).show()

但我得到的结果是-->

+---+----+----+----+
|Eno| n1| n2| n3|
+---+----+----+----+
| 1|null|null|null|
| 2|null|null|null|
+---+----+----+----+

任何人都可以帮助获得想要的结果。

最佳答案

val m= map(lit("A"), lit("n1"), lit("B"),lit("n2"), lit("C"), lit("n3"), lit("D"), lit("n1"), lit("E"), lit("n2"))
val df= Seq((1,"A"),(1,"B"),(1,"C"),(2,"D"),(2,"E")).toDF("Eno","Name")
df.withColumn("new", m($"Name")).groupBy("Eno").pivot("new").agg(first("Name"))


+---+---+---+----+
|Eno| n1| n2| n3|
+---+---+---+----+
| 1| A| B| C|
| 2| D| E|null|
+---+---+---+----+

关于scala - 使用spark scala将行转换为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52344890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com