在Pyspark中,如何使用与列表[item1,item2,.]中的一个或多个项目相交的数组列来过滤spark DataFrame?

at0kjp5o  于 5个月前  发布在  Spark
关注(0)|答案(1)|浏览(67)

问题:

我尝试使用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是什么?

wz1wpwve

wz1wpwve1#

我找到了答案。要使用列表(而不是列)作为过滤器,我需要将array(<list>)替换为array(*map(lit,<list>))
因此,正确的解决方案将是:

from pyspark.sql.functions import col, array, arrays_overlap, lit

df.select(*).where(arrays_overlap(col(<array_column>), array(*map(lit,<list>))))

字符串

相关问题