0

这是最佳实践带来更好的性能。让我们假设我们有以下数据框(只是一个小玩具示例)。

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 在许多情况下似乎表现更好。

4

0 回答 0