df = sqlContext.createDataFrame(pd.DataFrame([('id1', ['a','b','c']),
('id2', ['a','b','d']),
('id3', ['c','e','f'])],
columns=['id', 'items']))
from pyspark.sql.functions import udf, col, when
from pyspark.sql.types import ArrayType, StringType, IntegerType
filter_array_udf = udf(lambda arr: [1 if (x =='a' and x=='b') else 0 for x in arr], "int")
df2 = df.withColumn("listed1", filter_array_udf(col("items")))
df2.show(20,0)
Я пытаюсь пометить строку, если определенный идентификатор содержит строку «a» или «b». для которых udf возвращает нулевое значение. Я довольно новичок в udfs. Что мне нужно изменить в данном udf, чтобы получить желаемый результат
df.filter(F.array_contains(F.col('items'),'a')).show()
Это работает только для одной строки, но если я передам ['a', 'b'] в массиве. Выдает ошибку
Unsupported literal type class java.util.ArrayList [a, b]