如何使用Spark SQL查询反转数组中的元素?



我有如下数据输入数据关键数据[5、2、6、空,空)b(4、5、7、9日空,空,空)

我希望输出如下所示。输出:关键数据(6 2 5空,空)b(4、9、7、5、空,空,空)

基本上,数组中的元素需要通过在末尾保持null来反转。有人能帮我spark SQL查询吗?

我的方法-转换NULL进行排序,然后转换回NULL

select transform(sort_array(transform(data, x -> coalesce(x, 0)), False), x -> case when x=0 then null else x end) from table1

[编辑]

请注意,如果要在末尾对null进行反向排序,则不需要进行转换。sort_array()将自行工作

sort_array(data, False)

[编辑2]

有它指出我误解了这个问题,我相信这将工作…不过这有点复杂:
select 
concat( 
reverse(array_except(array(5,7,9,4,null,null,null), array(null))) 
, array_repeat(null
, aggregate(
transform(array(5,7,9,4,null,null,null), (x, i) -> (case when x is null then 1 else 0 end))
, 0, (acc, x) -> acc + x
)
)
)

该方法计算空值的数量,删除空值,反转数组并在数组末尾添加空值

未测试:

reverse(filter(array(0, null, 2, 3, null), x -> x IS NOT NULL))

然后添加:

filter(array(0, null, 2, 3, null), x -> x IS NULL)

看到过滤器

相关内容

  • 没有找到相关文章

最新更新