如何使用Spark比较两个表的列?

时间:2019-10-30 16:30:28

标签: scala apache-spark hadoop apache-spark-sql

我试图通过读取为DataFrames来比较两个table()。对于这些表中使用主键连接的每个公共列,请说order_id与其他列(例如order_date,order_name,order_event)。

我正在使用的Scala代码

int[] triangles = {
        // Back face
        0, 3, 2,
        0, 2, 1,

        ...
        ...
    };

上面的代码对于中等数据集工作正常,但是随着我的新旧表中列和记录的数量增加,执行时间也在增加。任何形式的建议表示赞赏。 谢谢你。

1 个答案:

答案 0 :(得分:0)

您可以执行以下操作:
1.在主键上外部加入新旧数据框
joined_df = df_old.join(df_new, primary_key, "outer") 2.如果可能,将其缓存。这样可以节省很多时间
3.现在,您可以遍历列并使用spark函数比较列(.isNull用于不匹配,==用于匹配等)

for (col <- df_new.columns){
  val matchCount = df_joined.filter(df_new[col].isNotNull && df_old[col].isNotNull).count()
  val nonMatchCount = ...
}

这应该相当快,尤其是当您可以缓存数据帧时。如果不能,那么最好将连接的df保存到磁盘上,以免每次都洗牌