Используя
from pyspark.sql import functions as f
и методы f.agg и f.collect_set Я создал столбец colSet в dataFrame какследует:
+-------+--------+
| index | colSet |
+-------+--------+
| 1|[11, 13]|
| 2| [3, 6]|
| 3| [3, 7]|
| 4| [2, 7]|
| 5| [2, 6]|
+-------+--------+
Теперь, как это возможно, используя python / и pyspark, чтобы выбрать только те строки, где, например, 3 является элементом массива в записи colSet (где вообще естьможет быть намного больше, чем только две записи!)?
Я пытался использовать функцию udf следующим образом:
isInSet = f.udf( lambda vcol, val: val in vcol, BooleanType())
вызывается через
dataFrame.where(isInSet(f.col('colSet'), 3))
Я такжепопытался удалить f.col из вызывающей программы и использовать его вместо определения isInSet, но ни одна из них не сработала, я получаю исключение:
AnalysisException: cannot resolve '3' given input columns: [index, colSet]
Любая помощь приветствуется при выборе строк с определенной записью.(или даже лучше подмножество !!!), учитывая строку с результатом collect_set.