Что является лучшей практикой и приводит к лучшей производительности . Предположим, у нас есть следующий фрейм данных (просто маленький игрушечный пример).
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, кажется, работает лучше во многих случаях.