У меня есть фрейм данных, содержащий следующие 2 столбца, среди прочих: 1. ID 2. list_IDs
Я пытаюсь создать 3-й столбец, возвращающий логическое значение True или False, если идентификатор присутствует в столбце list_IDв той же строке
Я пытался использовать следующее:
df = sqlContext.createDataFrame([(1, [1, 2, 3,]), (2, [1, 3, 4])], ("ID", "list_IDs"))
df.withColumn("IDmatch", when(col("ID").isin(F.col("list_IDs")), True).otherwise(False)).show()
Это не работает. Однако, если бы я предоставил некоторый статический список для сравнения, он, конечно, работает.
df.withColumn("IDmatch", when(col("ID").isin([2, 3]), True).otherwise(False)).show()
Я могу использовать udf для возврата логического типа, и это также работает:
@udf(returnType=BooleanType())
def isinlist(x, y):
return x in y
Однако я стараюсь избегать использования UDF в этом случае, если это возможно, иМне было интересно, можно ли использовать что-то родное .isin (), чтобы проверить, присутствует ли идентификатор в строке в списке значений в столбце list_ID для той же строки?