У меня есть фрейм данных pyspark, который содержит 4 столбца.
Пример фрейма данных:
id | name | age | job
-------------------------------------------------------------------
["98475", "748574"] | ["98475",748574] |
-------------------------------------------------------------------
["75473","98456"] | ["98456"] |
-------------------------------------------------------------------
["23456","28596"] | ["84758","56849","86954"]
-------------------------------------------------------------------
Я хочу сравнить 2 столбца (array<string> types)
:
Пример:
Array_A (id) | Array_B(name)
------------------------------
, если все значения в Array_B совпадают, являются значениями в Array_A ==> ok
, если все значения в Array_B находятся в array_A ==> medium
если значения Array_B не существуют в массиве_A ==> не найден
Я сделал UDF:
def contains(x,y):
z = len(set(x) - set(y))
if ((z == 0) & (set(x) == set(y))):
return "ok"
elif (set(y).isin(set(x))) & (z != 0):
return "medium"
else set(y) != set(x):
return "not found in raw"
contains_udf = udf(contains)
Затем:
new_df= df.withColumn(
"new_column",
F.when(
(df.id.isNotNull() & df.name.isNotNull()),
contains_udf(df.id,df.name)
).otherwise(
F.lit(None)
)
)
Я получил эту ошибку:
else set(y) != set(x):
^
SyntaxError: invalid syntax
Как я могу решить ее, используя udf или другое решение, например, array_contains? Спасибо