2014-11-22 88 views
0

我有一个数据集,则管道的输出烫,看起来像这样:斯卡拉/烫:枢轴数据

'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以某种方式工作,但看起来不正确。看起来像一些使用枢轴功能应该可以工作,但我不能解决如何枢轴转动多列。

任何帮助表示赞赏。

回答

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) 
    } 

    . 
+0

我打通了组合,并确定支点,但无法正确解压。几个问题在地图上。 1)在变量:行,它应阅读V34,V34而不是V34,V34?这指的是案例类的名字吧? 2)我在val行中收到一条错误,说它找不到Val值。什么是cabal和uveal指的?非常感谢您的帮助。 – 2014-11-24 03:34:52

+0

对不起,有问题2自动更正似乎让我了。错误说'找不到值xval'。 xval和yval指的是什么? – 2014-11-24 04:42:50

+0

1)是的,对不起,它应该是v34,当然是 2)我认为,这只是#1的一个副作用:'val(key,xval,yval)= vars'只是声明了三个新变量,并将'vars'解包入其中。我认为,这只是困惑,因为它认为'vars'没有被定义,因为类型名称中的拼写错误。 – Dima 2014-11-24 10:04:35