presto-如何滤除连续发生的数组值



我想从连续发生的数组中滤除值。

我尝试使用" array_distinct"&Presto中的"变换"功能,但无法进步。因为array_distinct仅给出不同的值,而不是我期望的

Input : [1,2,2,3,4,4,4,2]

预期输出:[1,2,3,4,2]

您可以通过组合ngramsfiltertransform来检查连续元素,如下:

presto> SELECT
     ->     ARRAY[a[1]] ||
     ->     transform(
     ->         filter(
     ->             ngrams(a, 2),
     ->             pair -> pair[1] IS DISTINCT FROM pair[2]),
     ->         pair -> pair[2])
     -> FROM (VALUES ARRAY[1,2,2,3,4,4,4,2]) t(a);
      _col0
-----------------
 [1, 2, 3, 4, 2]
(1 row)

说明:

  • ngrams(a, 2)建立兄弟姐妹对
  • 然后,
  • filter仅用于仅保留相同的元素;IS DISTINCT FROM用于更多NULL-普通=
  • transform用于从兄弟姐妹转换回平面阵列
  • 在前面添加了第一个元素(否则它将始终丢失(

请参阅https://trino.io/docs/current/functions/array.html有关所有可用数组功能的信息。

我认为不会有任何直接功能。您可以为逻辑编写自定义UDF。

https://geeks.jampp.com/data-infrastructure/technology/writing-custom-presto-functions/

https://www.qubole.com/blog/plugging-inpresto-udfs/

用户定义的presto

中的功能

这是算法:

https://www.geeksforgeeks.org/python-remove-consectee-duplicates-from-list/

相关内容

  • 没有找到相关文章