在将它们加入 Spark 之前,我应该减少 DF 中不需要的列吗?
Should I reduce not required columns in DFs before join them in Spark?
在将不需要的列加入 Spark 数据帧之前减少不需要的列是否有意义?
例如:
DF1有10列,DF2有15列,DF3有25列。
我想加入他们,select 需要 10 列并将其保存在 .parquet 中。
在连接之前仅使用 select 需要的列来转换 DF 是否有意义,或者 Spark 引擎将自行优化连接并且不会在连接操作期间对所有 50 列进行操作?
是的,这非常有意义,因为它减少了执行器之间混洗的数据量。最好尽早只选择必要的列——在大多数情况下,如果文件格式允许(Parquet、Delta Lake),Spark 将只读取必要列的数据,而不是所有列。即:
df1 = spark.read.parquet("file1") \
.select("col1", "col2", "col3")
df2 = spark.read.parquet("file2") \
.select("col1", "col5", "col6")
joined = df1.join(df2, "col1")
在将不需要的列加入 Spark 数据帧之前减少不需要的列是否有意义? 例如: DF1有10列,DF2有15列,DF3有25列。 我想加入他们,select 需要 10 列并将其保存在 .parquet 中。
在连接之前仅使用 select 需要的列来转换 DF 是否有意义,或者 Spark 引擎将自行优化连接并且不会在连接操作期间对所有 50 列进行操作?
是的,这非常有意义,因为它减少了执行器之间混洗的数据量。最好尽早只选择必要的列——在大多数情况下,如果文件格式允许(Parquet、Delta Lake),Spark 将只读取必要列的数据,而不是所有列。即:
df1 = spark.read.parquet("file1") \
.select("col1", "col2", "col3")
df2 = spark.read.parquet("file2") \
.select("col1", "col5", "col6")
joined = df1.join(df2, "col1")