Лучшая практика Pyspark для фильтрации с несколькими условиями - PullRequest
0 голосов
/ 21 апреля 2020

Что является лучшей практикой и приводит к лучшей производительности . Предположим, у нас есть следующий фрейм данных (просто маленький игрушечный пример).

values = [
  (1, 2, 3, 'united_states'),
  (2, 5, 8, 'brazil'),
  (3, 7, 7, 'france'),
  (4, 1, 1, 'france'),
  (5, 2, 3, 'brazil'),
]

columns = ['id', 'column_1', 'column_2', 'column_3']

df = spark.createDataFrame(values, columns)

# output
+---+--------+--------+-------------+
| id|column_1|column_2|     column_3|
+---+--------+--------+-------------+
|  1|       2|       3|united_states|
|  2|       5|       8|       brazil|
|  3|       7|       7|       france|
|  4|       1|       1|       france|
|  5|       2|       3|       brazil|
+---+--------+--------+-------------+

Представьте, что я хочу определить все записи, где (df.id < 5) & (df.column_3 == 'brazil') & (df.column_2 < 8). Я могу придумать два способа получить отфильтрованный фрейм данных.

# method 1
df_filtered = df.filter((df.id < 5) & (df.column_3 == 'brazil') & (df.column_2 < 8))

# method 2
df_filtered = df\
    .filter(df.id < 5)\
    .filter(df.column_3 == 'brazil')\
    .filter(df.column_2 < 8)

Вопрос: Для меня первый метод имеет то преимущество, что все происходит в одном вызове фильтра. Но второй метод кажется более длинным, но его легче понять. Итак, вот мой вопрос: какой из следующих методов считается наилучшей практикой , а какой лучше выполняет ?

Редактировать: как предлагается в комментариях. Я проверил время выполнения. И кажется, что method_2, кажется, работает лучше во многих случаях.

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