【问题标题】:Incrementally load data in parquet file using Apache Spark & Java使用 Apache Spark 和 Java 在 parquet 文件中增量加载数据
【发布时间】:2018-07-23 13:50:46
【问题描述】:

我在下面提到了以镶木地板格式保存的数据集,想要加载新数据并更新同一个文件,例如,使用 UNION 的新 ID 出现在“3”中,我可以添加该特定的新 ID,但如果相同的 ID 再次出现在 last_updated 列中的最新时间戳我只是想保留最新记录。我如何使用 Apache Spark 和 Java 来实现这一点。

+-------+------------+--------------------+---------+
|     id|display_name|        last_updated|is_active|
+-------+------------+--------------------+---------+
|      1|        John|2018-07-23 08:32:...|     true|
|      2|        Tony|2018-07-22 20:32:...|     true|
+-------+------------+--------------------+---------+

【问题讨论】:

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


    【解决方案1】:

    您可以使用“分组依据”按 last_update 列获取最新行。例如,联合后,你有一个数据集:

    +-------+------------+--------------------+---------+
    |     id|display_name|        last_updated|is_active|
    +-------+------------+--------------------+---------+
    |      1|        John|2018-07-23 08:32:...|     true|
    |      2|        Tony|2018-07-22 20:32:...|     true|
    |      2|        Tony|2018-07-22 21:45:...|     true|
    +-------+------------+--------------------+---------+
    

    首先,您必须将此数据集加载到 dataFrame。所以,你应该写的 SQL:

    select 
      t1.id, t1.display_name, t1.last_updated, t1.is_active
    from 
      **your_temp_view** as t1 
      inner join (
        select 
          id, max(last_updated) as max_last_updated
        from
          **your_temp_view**
        group by id
      ) as t2 on t1.id = t2.id and t1.last_updated = t2.max_last_updated
    

    【讨论】:

    • 谢谢@slmn,这行得通,但我想避免 groupby,因为我认为这可能会由于洗牌而增加我的处理时间,这将是大数据。
    猜你喜欢
    • 1970-01-01
    • 2017-09-06
    • 2015-10-28
    • 2019-07-03
    • 1970-01-01
    • 2019-12-23
    • 2020-11-09
    • 2018-10-12
    • 2015-10-13
    相关资源
    最近更新 更多