火花数据帧爆炸对列表
问题描述:
的
我的数据帧具有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
})
然而,这仅返回空值,因此它可能只是我的斯卡拉的知识贫乏。任何人都可以指出这个问题吗?
答
看起来像过去的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
})