0

我有 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

  • df_split1 = df_final 使用条件 1 过滤

  • df_split2 = df_final 使用条件 2 过滤

  • 在对两个数据帧执行不同操作后,将 df_split1,df_split2 写入单个表

在 pyspark 1.3.1 中,整个过程需要 15 分钟,默认分区值 = 10,执行程序内存 = 30G,驱动程序内存 = 10G,我在必要时使用了 cache()。

但是当我使用 hive 查询时,这几乎不需要 5 分钟。是否有任何特殊原因导致我的数据帧操作缓慢,有什么方法可以提高性能吗?

4

1 回答 1

0

您应该小心使用JOIN.

JOIN在火花中可能真的很贵。特别是如果连接在两个数据帧之间。您可以通过在同一列上重新分区两个数据帧或使用相同的分区器来避免昂贵的操作。

于 2019-09-30T21:46:42.523 回答