Предполагая, что ваша схема DataFrame похожа на следующую (здесь столбец page_list
представляет собой строку):
df.printSchema()
#root
# |-- page_name: string (nullable = true)
# |-- page_list: string (nullable = true)
Вы можете использовать from_json
, чтобы получить page_list
как массив строк. Затем используйте array_contains
, чтобы проверить, есть ли page_name
в этом списке.
Хитрость заключается в том, что вам придется использовать expr
до передачи значения столбца в качестве параметра от до array_contains
.
from pyspark.sql.types import StructType, StructField, ArrayType, StringType
from pyspark.sql.functions import expr, from_json
df.withColumn(
"flag",
from_json(
"page_list",
schema=StructType([StructField("page_list", ArrayType(StringType()))])
)["page_list"]
).withColumn(
"flag",
expr("array_contains(flag, page_name)")
).show(truncate=False)
#+---------+----------------------------------+-----+
#|page_name|page_list |flag |
#+---------+----------------------------------+-----+
#|home |{"page_list":["home","something"]}|true |
#|about |{"page_list":["something"]} |false|
#+---------+----------------------------------+-----+