我有3个数据帧df1,df2和df3。 每个数据帧大约有300万行。 df1和df3有apprx。 8列。 df2只有3列 (df1的源文本文件大小约为600MB)
以下是执行的操作:
df_new = df1 left join df2 - > group by df1 columns-> select df1 columns,first(df2 columns)
df_final = df_new外部联接df3
使用condition1过滤df_split1 = df_final
使用条件2过滤df_split2 = df_final
在对两个数据帧执行不同的操作后,将df_split1,df_split2写入单个表中
整个过程在pyspark 1.3.1中花费15分钟,默认分区值= 10,执行程序内存= 30G,驱动程序内存= 10G,我在必要时使用了cache()。
但是当我使用配置单元查询时,这几乎不需要5分钟。有什么特别的原因导致我的数据帧操作很慢并且有什么方法可以提高性能吗?
答案 0 :(得分:0)
使用JOIN
时要小心。
JOIN
可能非常昂贵。特别是如果联接在两个数据帧之间。通过在同一列上重新划分两个数据帧或使用相同的分区程序,可以避免昂贵的操作。