我有第一个事件,第二个事件和occaurence的数据框。它包括对采用以下格式:将元素对转换为火花中的矩阵
(e1,e2,10)
(e1,e1,1)
(e1,e3,12)
(e2,e1,10)
(e2,e2,50)
然后,我想写具有以下格式的CSV文件:
e1 e2 e3
e1 1 10 12
e2 10 50 0
e3 12 0 0
我有第一个事件,第二个事件和occaurence的数据框。它包括对采用以下格式:将元素对转换为火花中的矩阵
(e1,e2,10)
(e1,e1,1)
(e1,e3,12)
(e2,e1,10)
(e2,e2,50)
然后,我想写具有以下格式的CSV文件:
e1 e2 e3
e1 1 10 12
e2 10 50 0
e3 12 0 0
如果您有一个包含三个co的数据集lumns可以使用GROUPBY,支点和金额:
df.show
+---+---+-----+
| c1| c2| c3|
+---+---+-----+
| e1| e2| 10.0|
| e1| e1| 1.0|
| e1| e4| 12.0|
| e1| e4|100.0|
| e2| e1| 10.0|
| e2| e2| 50.0|
+---+---+-----+
df.groupBy("c1").pivot("c2").sum("c3").show
+---+----+----+-----+
| c1| e1| e2| e4|
+---+----+----+-----+
| e2|10.0|50.0| null|
| e1| 1.0|10.0|112.0|
+---+----+----+-----+
请注意,我用的“总和”,所以如果你有同样的事件对多次出现的更多的将汇总。如果您需要其他行为,您可以使用任何其他汇总函数(avg,min,max ...)。
如果你的数据帧是这样的:
e1 | e2 | 10
e1 | e1 | 1
e1 | e4 | 12
e1 | e4 | 100
e2 | e1 | 10
e2 | e2 | 50
Give是列名,看起来像这样(c1/c2/c3是列名,你可以使这些任何你想要的)...
c1 | c2 | c3
---|----|----
e1 | e2 | 10
e1 | e1 | 1
e1 | e4 | 12
e1 | e4 | 100
e2 | e1 | 10
e2 | e2 | 50
,并使用熊猫的数据帧pivot_table
功能
沿(df是表名)行..
df = df.pivot_table(values = 'c3', index = 'c1', columns = 'c2')
这在理论上将使它看起来像你期望的输出:
e1 e2 e3
e1 1 10 12
e2 10 50 0
e3 12 0 0
未测试