问题:
我尝试使用pyspark
在Spark DataFrame上应用一个常见的 * 条件过滤器 *。最终,我希望只返回其数组列包含一个或多个提供的独立列表项的行。
在SQL中,这很容易。我会使用以下代码模板:
select <columns>
from <table>
where arrays_overlap(<array_column>,array(<list>))
字符串
然而,当我把它翻译成spark时,我的代码失败了。
from pyspark.sql.functions import col, array, arrays_overlap
df.select(*).where(arrays_overlap(col(<array_column>), array(<list>)))
型
AnalysisException:[UNRESOLVED_COLUMN.WITH_SUGGESTION]无法解析名称为<1st item in list>
的列或函数参数。
这很奇怪,因为如果我在pyspark
中应用array_contains
条件,代码将按预期运行。然而,array_contains
在这里对我没有帮助,因为它只查看一个项目,而不是列表。
与上面共享的SQL where
条件等价的正确pyspark是什么?
1条答案
按热度按时间wz1wpwve1#
我找到了答案。要使用列表(而不是列)作为过滤器,我需要将
array(<list>)
替换为array(*map(lit,<list>))
。因此,正确的解决方案将是:
字符串