使用Apache Spark和Java将数据增量加载到镶木地板文件中

时间:2018-07-23 03:19:10

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

我在下面提到了以镶木地板格式保存的数据集,想要随其加载新数据并更新相同的文件,例如说使用UNION在“ 3”中出现一个新ID,我可以添加该特定新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|
+-------+------------+--------------------+---------+

1 个答案:

答案 0 :(得分:1)

您可以使用“ group by”通过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