2017-03-01 61 views
1

我打算從數組創建數據框 - 將數組的元素順序分配到多個列。將數組的元素重新分配到數據框中的多列

例如:

var A = Array(1,2,4,21,2,4,34,2,24,2,4,24,5,8,4,2,1,1) 
var B = sc.parallelize(A.grouped(3).toList).map(Tuple1(_)).toDF("values") 

|  values| 
+-----------+ 
| [1, 2, 4]| 
| [21, 2, 4]| 
|[34, 2, 24]| 
| [2, 4, 24]| 
| [5, 8, 4]| 
| [2, 1, 1]| 
+-----------+ 

上述結果,但我需要在3組不同的列這3個要素。

請建議一個解決方案,不要硬編碼3個元素。

回答

1

基本問題是你正在創建Tuple1這是一個單一的元素。如果你使用ax => Tuple3(x(0),x(1),x(2)),它將解決它的情況下爲3.

如果你不想硬編碼,你可以做一些事情像這樣:

def addColumns(num: Int, origDF: DataFrame) { 
    var df = origDF 
    for { 
     x <- 0 to num 
    } { 
     df = df.withColumn(s"col_$x", udf((y: Seq[Int]) => y(x))($"values")) 
    } 
    df 
} 

這將提取相關列(您可能還想刪除原始值)。

相關問題