如何检查 Spark 数据帧结构体数组是否包含特定值

Des*_* me 5 apache-spark apache-spark-sql

我有一个具有以下架构的数据框

我的要求是过滤与任何地址数组元素中的给定字段(如城市)匹配的行。我可以访问单个字段,例如loyaltyMember.address[0].city,但我必须检查所有地址数组元素以查看是否存在任何匹配项。我如何在 spark sql 中实现这一点,我无法使用 array_contains 函数,因为数组是复杂类型

root
 |-- loyaltyMember: struct (nullable = true)
 |    |-- Name: string (nullable = true)
 |    |-- address: array (nullable = true)
 |    |    |-- element: struct (containsNull = true)
 |    |    |    |-- addressType: string (nullable = true)
 |    |    |    |-- city: string (nullable = true)
 |    |    |    |-- countryCode: string (nullable = true)
 |    |    |    |-- postalCode: string (nullable = true)
 |    |    |    |-- street: string (nullable = true)
Run Code Online (Sandbox Code Playgroud)

Dav*_*rba 16

我相信你仍然可以使用array_contains如下(在 PySpark 中):

from pyspark.sql.functions import col, array_contains

df.filter(array_contains(col('loyaltyMember.address.city'), 'Prague'))
Run Code Online (Sandbox Code Playgroud)

这将过滤数组列city元素“布拉格”中的所有行。

  • 非常感谢您的建议,从地址数组中删除索引大括号 [] 确实有效。 (3认同)