环境:spark2.4.5
我的spark sql:
SELECT A.*
FROM table_0
LATERAL VIEW explode(table_0.Array_0) exploded_a_values AS A
UNION
SELECT B.*
FROM table_0
LATERAL VIEW explode(table_0.Array_1) exploded_a_values AS B
分解结构a和b具有相同的模式。其中一个为空时出错:
Can only star expand struct data types. Attribute: `ArrayBuffer)`;
注意数组中的元素是struct类型。我的目的是在不同的数组中挑选不同的元素。
那么我怎么处理这样的空箱呢?如果你能给我一些建议,我将不胜感激。
1条答案
按热度按时间js5cn81o1#
当您使用
explode(table_0.Array_0) exploded_a_values AS A
,在这里
exploded_a_values
变成table
和A
成为表示exploded column
因此,你不能打电话A.*
但你当然可以打电话exploded_a_values.*
因此修改后的查询如下所示-1. 读取输入
输出-
2. 运行联合查询
输出-
注意:联合只能在具有兼容列类型的表上执行。
编辑-1(根据评论)
试用
Array<struct>
,同样的查询对我很有效-结果如下:有关完整示例,请参阅本要点