这是最佳实践并带来更好的性能。让我们假设我们有以下数据框(只是一个小玩具示例)。
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 在许多情况下似乎表现更好。