pyspark 如何使用pysark检查数组是否包含字符串

6jjcrrmo  于 2022-12-22  发布在  Spark
关注(0)|答案(1)|浏览(343)

花括号很奇怪。尝试了不同的方法,但都不起作用

# root
#  |-- L: array (nullable = true)
#  |    |-- element: struct (containsNull = true)
#  |    |    |-- S: string (nullable = true)

# +------------------+
# |                 L|
# +------------------+
# |[{string1}]|
# |[{string2}]|
# +------------------+
ztigrdn8

ztigrdn81#

使用filter()获取与给定条件匹配的数组元素。
因为数组的元素是struct类型,所以使用getField()读取字符串类型字段,然后使用contains()检查字符串是否包含搜索项。
以下示例搜索术语“hello”:

df = spark.createDataFrame(data=[[[("hello world",)]],[[("foo bar",)]]], schema="L array<struct<S string>>")

string_to_search = "hello"

import pyspark.sql.functions as F

df = df.withColumn("arr_contains_str", \
                   F.size( \
                          F.filter("L", \
                                   lambda e: e.getField("S") \
                                              .contains(string_to_search))) > 0)

df.show(truncate=False)

输出:

+---------------+----------------+
|L              |arr_contains_str|
+---------------+----------------+
|[{hello world}]|true            |
|[{foo bar}]    |false           |
+---------------+----------------+

相关问题