我无法在DF以下转换:
| A | B | C |
| 1 | 2 | t1,t2,t3|
| 1 | 3 | t4,t5 |
| 2 | 2 | t1,t5 |
到DF以下:
| A | B | t1 | t2 | t3 | t4 | t5 |
| 1 | 2 | 1 | 1 | 1 | 0 | 0 |
| 1 | 3 | 0 | 0 | 0 | 1 | 1 |
| 2 | 2 | 1 | 0 | 0 | 0 | 1 |
在斯卡拉火花中。
列C
中的值以逗号分隔,我希望它使它们成为独立的列。一旦做到这一点我想,如果那个特定行标记0和1 t1
,t2
等的存在与否。
请在这里帮助。会真的很感激。
可以使用来完成pivot
。然而,第一分割上的数据“”和explode
在C
列。
df.withColumn("C", explode(split($"C", ",")))
.groupBy("A", "B")
.pivot("C")
.count()
.na.fill(0)
结果:
+---+---+---+---+---+---+---+
| A| B| t1| t2| t3| t4| t5|
+---+---+---+---+---+---+---+
| 2| 2| 1| 0| 0| 0| 1|
| 1| 2| 1| 1| 1| 0| 0|
| 1| 3| 0| 0| 0| 1| 1|
+---+---+---+---+---+---+---+
上述解决方案假定所有的行具有的值的唯一组合中A
和B
(由于使用的groupBy
)。如果不是这种情况,则需要执行其他步骤:
添加一个新列一个唯一的ID可与使用A
,并B
在groupBy
,例如:
df.withColumn("D", monotonically_increasing_id)
可以在之后删除此列pivot
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句