如何实现Spark select-explode成语?

hil*_*lel 6 apache-spark apache-spark-sql

假设我们有一个带有字符串列的DataFrame col1,以及一个数组列col2.我想知道Spark操作幕后发生了什么:

df.select('col1', explode('col2'))

似乎select将一系列Column对象作为输入,并且explode返回a Column以使类型匹配.但是返回的列explode('col2')在逻辑上与长度不同col1,所以我想知道select在构造其输出DataFrame时如何知道"同步"它们.我试着查看Column类的线索,但实际上找不到任何东西.

zer*_*323 6

答案很简单 - 没有这样的数据结构Column.虽然Spark SQL使用列式存储进行缓存,并且可以利用数据布局进行某些低级操作,但列只是数据和转换的描述而不是数据容器.因此简化事情有点explode是另一个flatMapDataset[Row].