我有一个带有如下数组列的数据集:
+--------+--------------------+
|user_id |array_of_items |
+--------+--------------------+
|4049494 |[x1, x2, x3, x4, x5]|
|3046908 |[x6, x7, x8, x9] |
...
如何在不使用 udf 的情况下仅使用 SQL 来查找如下所示的数组?
+--------+----------------------------+
|user_id |array_of_items_diff |
+--------+----------------------------+
|4049494 |[x2-x1, x3-x2, x4-x3, x5-x4]|
|3046908 |[x7-x6, x8-x7, x9-x8] |
...
您可以使用转换函数:
如果您需要实际数学而不是连接,那么只需更改
array_of_items[i+1] || '-' || x
为array_of_items[i+1] - x
。我曾经
slice(...,1,size(array_of_items)-1)
删除了最后一个为空的数组项。如果原始数组中没有值为空的项,您也可以使用array_compact (spark 3.4.0+) 或filter函数来删除生成的空值。