2017-08-09 209 views
0

我的數據幀具有2列,其看起來像這樣:火花數據幀爆炸對列表

col_id| col_name 
----------- 
id1 | name1 
id2 | name2 
------------ 
id3 | name3 
id4 | name4 
.... 

所以對於每一行,有相同的長度的成列的ID和名稱2個匹配陣列。我想要的是讓每對ID /名稱作爲一個單獨的行狀:

col_id| col_name 
----------- 
id1 | name1 
----------- 
id2 | name2 
.... 

explode似乎想使用的功能,但我似乎無法得到它的工作。我試過是:

rdd.explode(col("col_id"), col("col_name")) ({ 
case row: Row => 
    val ids: java.util.List[String] = row.getList(0) 
    val names: java.util.List[String] = row.getList(1) 

    var res: Array[(String, String)] = new Array[(String, String)](ids.size) 
    for (i <- 0 until ids.size) { 
    res :+ (ids.get(i), names.get(i)) 
    } 
    res 
}) 

然而,這僅返回空值,因此它可能只是我的斯卡拉的知識貧乏。任何人都可以指出這個問題嗎?

回答

0

看起來像過去的1-2小時過去的10分鐘做了伎倆哈哈。這工作得很好:

df.explode(col("id"), col("name")) ({ 
case row: Row => 
    val ids: List[String] = row.getList(0).asScala.toList 
    val names: List[String] = row.getList(1).asScala.toList 

    ids zip names 
})