首页 > 解决方案 > Spark join 删除连接列

问题描述

我有 2 个要执行连接的数据集。数据集 merc 和 ded 都具有相同的架构。

架构:id、mid、pid、zid

List<String> joinSeqList = Lists.newArrayList("id","mid");
Dataset<Row> dataDF = merc.as("merc")
                .join(ded.as("ded"),
                        convertListToSeq(joinSeqList),
                        "fullouter");

private Seq<String> convertListToSeq(List<String> inputList) {
        return scala.collection.JavaConversions.asScalaBuffer(inputList).seq();
    }

我面临的问题是生成的架构具有所有列,merc但不是所有列ded。来自 ded 的 id 和 mid 在最终模式中不存在(它们是连接列)。

既然我得到了所有的列merc,我怎么能得到所有的列ded

所以输出应该包含所有列mercded

标签: apache-sparkapache-spark-sqlapache-spark-dataset

解决方案


我能够使用以下连接条件解决

Dataset<Row> dataDF =  merc.as("merc")
            .join(ded.as("ded"),col("merc.id").equalTo(col("ded.id")).and(
                                              col("merc.mid").equalTo(col("ded.mid"))), "outer");

推荐阅读