【问题标题】:Spark SQL Query to Compare two Spark Dataframes using Spark Java使用 Spark Java 比较两个 Spark 数据帧的 Spark SQL 查询
【发布时间】:2020-06-07 12:56:28
【问题描述】:

我有两个数据框。我从 Kafka 读取的输入数据帧和我从 DB2 数据库读取的另一个数据帧。

注意:我正在使用 Spark Java 进行编码。

要求是:

例如

INPUT_DF

ID  NAME    CITY        DATE
----------------------------------  <In comparison to BASE_DATAFRAME>
111 aaa     ATLANTIC    20200201    <New ID>
222 bbb     PACIFIC     20200202    <ID Exist, Later DATE, NAME different>
333 bbb     INDIAN      20200201    <ID Exist, Earlier DATE>
444 NNN     CORAL       20200205    <ID Exist, Earlier DATE, ALL OTHER COLUMNS SAME VALUE>
555 bbb     INDIAN      20200206    <ID Exist, Later DATE, ALL OTHER COLUMNS SAME VALUE>
666 aaa     ATLANTIC    20200201    <New ID>
BASE_DATAFRAME from DB2 TABLE

ID  NAME    CITY        DATE
----------------------------------
222 CCC     PACIFIC     20200201
333 bbb     ATLANTIC    20200203
444 NNN     CORAL       20200206
555 bbb     INDIAN      20200202

结果 1:

ID  NAME    CITY        DATE
----------------------------------
111 aaa     ATLANTIC    20200201
666 aaa     ATLANTIC    20200201

结果 2:

ID  NAME    CITY        DATE
----------------------------------
222 bbb     PACIFIC     20200202

请帮助我进行查询以获得结果。

谢谢

【问题讨论】:

  • 请解释你是如何得到结果 1 和结果 2 的另外,你想在这里实际实现什么?问题不完整

标签: java dataframe apache-spark apache-spark-sql


【解决方案1】:

找到解决方案.. 使用下面的查询来获得这两个结果。

Result 1:
spark.sql("SELECT f.* FROM INPUT_DF f LEFT JOIN BASE_DATAFRAME s ON f.ID=s.ID WHERE s.ID is NULL");

Result 2:
spark.sql("SELECT f.* FROM INPUT_DF f JOIN BASE_DATAFRAME s ON f.ID=s.ID WHERE f.DATE>s.DATE and (f.name<>s.name OR f.city<>s.city)");

【讨论】:

    猜你喜欢
    • 2018-01-15
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    • 2019-07-17
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多