Scala / Scalding:透视数据

时间:2014-11-22 01:51:18

标签: scala scalding

我有一个数据集,它是烫伤管道的输出,如下所示:

'Var1, 'Var2, 'Var3, 'Var4 =
 a,x,1,2
 a,y,3,4
 b,x,1,2
 b,y,3,4

我试图把它变成像:

'Var1, 'Var3x, 'Var4x, 'Var3y, 'Var4y =
a,1,2,3,4
b,1,2,3,4

首先,我认为使用flatMap会以某种方式工作,但这似乎并不合适。似乎有些使用pivot功能应该可以工作,但我无法弄清楚如何转动多个列。

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您需要将两个值列合并为一个,然后才能使用.pivot。 像这样:

case class v34(v3: Int, v4: Int) 
pipe
    .map(('Var3, 'Var4) -> ('V34)) { vars: (Int, Int) => v34(vars._1, vars._2) }
    .groupBy('Var1) { _.pivot(('Var2, 'V34) => ('x, 'y)) }
    .mapTo(('Var1, 'x, 'y) -> ('Var1, 'Var3x, 'Var4x, 'Var3y, 'Var4y) { 
       vars: (String,V34,V34) =>
       val (key, xval, yval) = vars
       (key, xval.v3, xval.v4, yval.v3, yval.v4)
    }

    .