我的DataFrame看起来像这样:
val_1 val_2 seq
ABC DEF 1
ABC DEF 2
ABC DEF 3
GHI LMN 1
GHI LMN 2
我想要的结果
val_1 val_2 cod_1 cod_2 cod_3
ABC DEF 1 2 3
GHI LMN 1 2
达到此结果的最佳方法是什么?
我创建了一个名为cod_num
的列,其中num=max(seq)
。
我的想法是创建一个像下面这样的DataFrame,然后在val_1
和val_2
上进行分组。
val_1 val_2 seq cod_1 cod_2 cod_3
ABC DEF 1 1
ABC DEF 2 2
ABC DEF 3 3
GHI LMN 1 1
GHI LMN 2 2
我试图通过这种方式将正确的列简单地传递给dataFrame.withColumn
myDF.withColumn("cod_" + $"seq", $"seq")
。
不会引发任何错误,但是如果我呼叫myDF.show
myDF
与以前一样。
答案 0 :(得分:0)
您可以使用pivot
:
df.groupBy("val_1", "val_2")
.pivot("seq")
.agg(first("seq"))
.show()
+-----+-----+---+---+----+
|val_1|val_2| 1| 2| 3|
+-----+-----+---+---+----+
| ABC| DEF| 1| 2| 3|
| GHI| LMN| 1| 2|null|
+-----+-----+---+---+----+
如果要将列重命名为例如cod_1
,它可以像this
注意:myDF.withColumn("cod_" + $"seq", $"seq")
不能工作,因为第一个参数是字符串,而不是列,因此将其扩展为
"cod_" + new ColumnName("seq").toString
总是产生cod_seq