我有一个Dataframe(Java),它具有以下简单模式。这是一个示例实例:
+-------------------+
| id | key | Value |
+-------------------+
| 01 | A | John |
| 01 | B | Nick |
| 02 | A | Mary |
| 02 | B | Kathy |
| 02 | C | Sabrina|
| 03 | B | George |
+-------------------+
我想将其转换为以下内容:
+------------------------------+
| id | A | B | C |
+------------------------------+
| 01 | John | Nick | null |
| 02 | Mary | Kathy | Sabrina |
| 03 | null | George | null |
+------------------------------+
我尝试了pivot运算符(因为它实际上是这样)但部分工作,因为一旦值A B和C成为列,列的内容只能是数字。
Dataset<Row> pivotTest2 = pivotTest.groupBy(col("id")).pivot("key").count();
我真正想要的是,在计数的位置,放置列值的值,即.select(col("Value"))
,甚至.max("Value")
形式的东西都可以正常工作,但是我不能,因为Value
不是算术列。
答案 0 :(得分:0)
执行以下操作应该适合您
import static org.apache.spark.sql.functions.*;
Dataset<Row> pivotTest2 = pivotTest.groupBy(col("id")).pivot("key").agg(first("Value"));
pivotTest2.show(false);
应该给你
+---+----+------+-------+
|id |A |B |C |
+---+----+------+-------+
|01 |John|Nick |null |
|03 |null|George|null |
|02 |Mary|Kathy |Sabrina|
+---+----+------+-------+