2017-08-09 113 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 
})