我已经在线查看了一些问题,但他们似乎并没有做我想做的事情。Spark:Transpose DataFrame Without Aggregating
我在Scala上使用Apache Spark 2.0.2。
我有一个数据帧:
+----------+-----+----+----+----+----+----+
|segment_id| val1|val2|val3|val4|val5|val6|
+----------+-----+----+----+----+----+----+
| 1| 100| 0| 0| 0| 0| 0|
| 2| 0| 50| 0| 0| 20| 0|
| 3| 0| 0| 0| 0| 0| 0|
| 4| 0| 0| 0| 0| 0| 0|
+----------+-----+----+----+----+----+----+
,我要转置到
+----+-----+----+----+----+
|vals| 1| 2| 3| 4|
+----+-----+----+----+----+
|val1| 100| 0| 0| 0|
|val2| 0| 50| 0| 0|
|val3| 0| 0| 0| 0|
|val4| 0| 0| 0| 0|
|val5| 0| 20| 0| 0|
|val6| 0| 0| 0| 0|
+----+-----+----+----+----+
我一直在使用pivot()
尝试,但我无法得到正确的答案。我最终遍历了我的val{x}
列,并按照以下方式对每个列进行了旋转,但事实证明这很慢。
val d = df.select('segment_id, 'val1)
+----------+-----+
|segment_id| val1|
+----------+-----+
| 1| 100|
| 2| 0|
| 3| 0|
| 4| 0|
+----------+-----+
d.groupBy('val1).sum().withColumnRenamed('val1', 'vals')
+----+-----+----+----+----+
|vals| 1| 2| 3| 4|
+----+-----+----+----+----+
|val1| 100| 0| 0| 0|
+----+-----+----+----+----+
然后对val{x}
每次迭代给我的第一数据框中使用union()
。
+----+-----+----+----+----+
|vals| 1| 2| 3| 4|
+----+-----+----+----+----+
|val2| 0| 50| 0| 0|
+----+-----+----+----+----+
是否有转在这里我不想汇总数据,更有效的方法是什么?
谢谢:)
我怎样才能做到这一点与数据框? –
您是否期望不同的答案,或者您对现有答案满意? – 2016-12-11 02:34:59