Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何更新数据集<;世界其他地区>;使用来自另一个数据集的记录<;世界其他地区>;Spark中哪些模式与JAVA API相同?_Java_Apache Spark_Apache Spark Sql_Apache Spark Dataset - Fatal编程技术网

如何更新数据集<;世界其他地区>;使用来自另一个数据集的记录<;世界其他地区>;Spark中哪些模式与JAVA API相同?

如何更新数据集<;世界其他地区>;使用来自另一个数据集的记录<;世界其他地区>;Spark中哪些模式与JAVA API相同?,java,apache-spark,apache-spark-sql,apache-spark-dataset,Java,Apache Spark,Apache Spark Sql,Apache Spark Dataset,假设您有一个具有以下记录的数据集a: Dataset A: {key1, val1} {key2, val2} {key3, val3} Dataset B: {key4, val4} {key1, valBB} {key5, valN} {key2, NNNNN} “更新”发生后,最终数据集应该是这样的: Dataset Final: {key1, valBB} {key2, NNNNN} {key3, val

假设您有一个具有以下记录的数据集a:

Dataset A:
    {key1, val1}
    {key2, val2}
    {key3, val3}

Dataset B:
    {key4, val4}
    {key1, valBB}
    {key5, valN}
    {key2, NNNNN}
“更新”发生后,最终数据集应该是这样的:

Dataset Final:
    {key1, valBB}
    {key2, NNNNN}
    {key3, val3}
    {key4, val4}
    {key5, valN}

到目前为止,我采用的方法是将两个数据集转换为JavaRDD,然后转换JavaRDD->JavaPairdd,然后转换firstPairdd.subtractByKey(secondPairdd)。这给了我数据集A中存在但数据集B中不存在的记录。然后我将其重新转换回数据集。下一步是与DatasetB进行联合,以获得更新的数据集。对我来说,这并没有给我预期的结果。我采取了错误的方法吗?任何帮助都将不胜感激。

我最终找到了一个更有效的解决方案:

    Dataset<Row> existsInAButNotB = A.join(B, A.col("key").equalTo(B.col("key") "left_anti");
    Dataset<Row> Final = existsInAButNotB.union(B); 
Dataset existsInAButNotB=A.join(B,A.col(“key”).equalTo(B.col(“key”)“left_anti”);
Dataset Final=existsInAButNotB.union(B);
如果有多个列用作键,则解决方案应如下所示:

Dataset<Row> existsInAButNotB = A.join(B, A.col("key1").equalTo(B.col("key1").and(A.col("key2").equalTo(B.col("key2")) "left_anti");
Dataset existsInAButNotB=A.join(B,A.col(“key1”).equalTo(B.col(“key1”))和(A.col(“key2”).equalTo(B.col(“key2”))“left_anti”);
这一行程序避免了用户进入低效的RDD世界,也避免了添加额外的代码

看看这个:

有关左侧反连接的更多信息,请参见此处:

数据集连接API: