我最近在一次采访中遇到了这个问题,一直没有找到一个令人满意的答案。增量合并可以包含用于插入的新记录以及对旧记录的更新。
我建议使用合并语句,但面试官说这将涉及扫描整个目标表,这是不希望的。有没有更好的方法来合并而不扫描大表呢?
最好的处理方法是在spark中使用broadcast Join。您可以定义属性park.sql.autoBroadcastJoinThreshold,并将其值设置为您较小的增量源表的大小。
所以当你的小数据(增量记录数据集)到达时,它的副本被创建并发送到每个包含大数据集的节点。通过这种方式,网络洗牌成本节省为大数据集不必在network
中进行洗牌。示例:df_join = Large_dataset.join(broadcast(small_dataset)).