【发布时间】:2022-11-02 03:05:26
【问题描述】:
我希望对数组列进行过滤,以检查数组中的每个值是大于 10 还是小于 5,这就像在 presto 中使用 cardinality(filter(col, x -> x < 5 or x >10)) > 0 一样。有没有可能用纯spark sql来实现?
【问题讨论】:
我希望对数组列进行过滤,以检查数组中的每个值是大于 10 还是小于 5,这就像在 presto 中使用 cardinality(filter(col, x -> x < 5 or x >10)) > 0 一样。有没有可能用纯spark sql来实现?
【问题讨论】:
您可以使用 forall 功能来实现这一点
下面是示例过滤器
df.filter(F.expr("forall(arr, x -> x<5 or x>10)"))
在这里,我假设 arr 是数据框 df 内的列名,其中每个值应小于 5 或大于 10
forall的详情here
【讨论】:
您能否提供解决方案的完整文件以及您正在过滤的列信息?我是apache spark的新手。该文件将帮助那些不熟悉 apache spark 的人。我导入了 org.apache.sql.functions.expr,但我收到“forall”不是注册函数的错误。
【讨论】: