Фильтр PySpark по столбцу данных - PullRequest
0 голосов
/ 02 октября 2018

Я недавно начал с PySpark, поэтому я начинающий.То, что я хочу сделать, это отфильтровать один фрейм данных на основе другого фрейма данных.Проще говоря, у меня есть df1 со столбцами A, B, C и df2 со столбцом A. Я хочу вывести только строки df1, которые имеют значения столбца в пределах значений df2.

В настоящее время он настроен какследующее:

df_final = df1.join(df2, df2.A == df1.A)

То, что я нашел в Интернете, также является следующим решением:

df_final = df1.join(df2, Seq("A"), "left_anti")

Кажется, что это делает то же самое, но мне интересно, какое из них более правильное / лучше работает?

В то же время я обнаружил, что можно использовать .filter, но я понятия не имею, как его использовать, датафрейм / список.

На самом деле главный вопрос - что лучшеспособ выполнить эту задачу, чтобы запустить работу как можно быстрее?

Спасибо и наилучшими пожеланиями

1 Ответ

0 голосов
/ 04 октября 2018

В примечании Seq недоступно внутри Python.

df_final = df1.join(df2, Seq("A"), "left_anti")

Предположим, df1 имеет следующее содержимое

+---+----+-----+
|  A|   B|    C|
+---+----+-----+
|  1|John|Smith|
|  2|Praz| June|
|  3|hell|valu3|
|  4|test|valu2|
+---+----+-----+

И df2 имеет

+---+
|  A|
+---+
|  1|
|  2|
|  3|
|  4|
+---+

Когда вы сделаете это

df_final = df1.join(df2, df2.A == df1.A)

Теперь он будет Предупредить !! с помощью:

построения тривиально истинного предиката равенства, 'A # 154L = A # 154L'.Возможно, вам нужно использовать псевдонимы.

Это означает, что вы пытаетесь соединить два DataFrame с одинаковыми column.

Вы сказали,

Я хочу вывести толькоСтроки df1, которые имеют значения столбца A в пределах значений df2.

Вы можете выбрать df1 строк из столбца A, используя .select() т.е.

df1_A = df1.select('A')

Затем вы можете join() using

from pyspark.sql.functions import col  
df_final = df1_A.alias('le').join(df2.alias('ri'), (col('le.A') == col('ri.A'))) 
  • col : Возвращает столбец на основе заданного имени столбца.

Относительно фильтра вы можете использовать фильтр, когда выхочу оценить исходя из каких-то условий.За дополнительной информацией обращайтесь: класс DataFrame

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...