将元素对转换为spark中的矩阵

时间:2017-08-09 15:19:22

标签: scala apache-spark

我有第一个事件,第二个事件和场合的数据框。它由以下格式的对组成:

(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

2 个答案:

答案 0 :(得分:2)

如果您有一个包含三列的数据集,则可以使用groupBy,pivot和sum:

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|
+---+----+----+-----+

请注意,我使用“sum”,因此,如果您不止一次拥有相同的一对事件,则会对您的事件进行求和。如果您想要其他行为,可以使用任何其他聚合函数(avg,min,max ...)。

答案 1 :(得分:0)

如果您的数据框如下所示:

c1 | c2 | c3
---|----|----
e1 | e2 | 10
e1 | e1 | 1
e1 | e4 | 12
e1 | e4 | 100
e2 | e1 | 10
e2 | e2 | 50 

给列的名称看起来像这样(c1 / c2 / c3是你可以根据需要制作这些名称的列名)......

pivot_table

并使用pandas数据框df = df.pivot_table(values = 'c3', index = 'c1', columns = 'c2') 函数

沿着(df是表名)..

    e1  e2  e3
e1  1   10  12
e2  10  50  0
e3  12   0  0

理论上它会使它看起来像你的预期输出:

let shiftBits: UInt8 = 4   // 00000100 in binary
shiftBits << 1             // 00001000
shiftBits << 2             // 00010000
shiftBits << 5             // 10000000
shiftBits << 6             // 00000000
shiftBits >> 2             // 00000001

尚未测试