Контекст: Мне нужно отфильтровать фрейм данных на основе того, что содержит столбец другого фрейма, используя функцию isin .
Для пользователей Python, работающих с пандами, это будетbe: isin () .
Для пользователей R это будет: % в% .
Итак, у меня есть простой искровой фрейм данных с id и значение столбцы:
l = [(1, 12), (1, 44), (1, 3), (2, 54), (3, 18), (3, 11), (4, 13), (5, 78)]
df = spark.createDataFrame(l, ['id', 'value'])
df.show()
+---+-----+
| id|value|
+---+-----+
| 1| 12|
| 1| 44|
| 1| 3|
| 2| 54|
| 3| 18|
| 3| 11|
| 4| 13|
| 5| 78|
+---+-----+
Я хочу получить все идентификаторы, которые появляются несколько раз.Вот кадр данных уникальных идентификаторов в df:
unique_ids = df.groupBy('id').count().where(col('count') < 2)
unique_ids.show()
+---+-----+
| id|count|
+---+-----+
| 5| 1|
| 2| 1|
| 4| 1|
+---+-----+
Итак, логическая операция будет такой:
df = df[~df.id.isin(unique_ids.id)]
# This is the same than:
df = df[df.id.isin(unique_ids.id) == False]
Однако я получаю пустой кадр данных:
df.show()
+---+-----+
| id|value|
+---+-----+
+---+-----+
Эта «ошибка» работает противоположным образом:
df[df.id.isin(unique_ids.id)]
возвращает все строки df.