Scala 如何避免在通过spark接收数据期间创建重复项?
我必须每天阅读和存储新到达的文件。 这些文件是简单的csv文件,但问题是,有时新到达的日志文件包含整个以前的日志文件 例如,在这个场景中,我希望保留第一天的整个文件(文件1),并将其保存到拼花地板。 第二天,我只想存储新文件(文件2)中的两行新行 文件1:Scala 如何避免在通过spark接收数据期间创建重复项?,scala,apache-spark,duplicates,Scala,Apache Spark,Duplicates,我必须每天阅读和存储新到达的文件。 这些文件是简单的csv文件,但问题是,有时新到达的日志文件包含整个以前的日志文件 例如,在这个场景中,我希望保留第一天的整个文件(文件1),并将其保存到拼花地板。 第二天,我只想存储新文件(文件2)中的两行新行 文件1: col1 col2 col3 dayOfProcessing c1 c1 c1 2020-01-01 c1 c1 c1 2020-01-01 c2 c2 c2
col1 col2 col3 dayOfProcessing
c1 c1 c1 2020-01-01
c1 c1 c1 2020-01-01
c2 c2 c2 2020-01-01
c3 c3 c3 2020-01-01
文件2:
col1 col2 col3 dayOfProcessing
c1 c1 c1 2020-01-02
c1 c1 c1 2020-01-02
c2 c2 c2 2020-01-02
c3 c3 c3 2020-01-02
c4 c4 c4 2020-01-02
c5 c5 c5 2020-01-02
预期产出:
col1 col2 col3 dayOfProcessing
c1 c1 c1 2020-01-01
c1 c1 c1 2020-01-01
c2 c2 c2 2020-01-01
c3 c3 c3 2020-01-01
c4 c4 c4 2020-01-02
c5 c5 c5 2020-01-02
是否有任何已经使用过的魔法可以做到这一点,而无需阅读所有已存储的拼花?
为了再次混淆,我们需要存储文件中出现的重复项。(请参见c1行。)如果文件名在多天之间相同,则可以使用该文件名。否则,请在旧数据和新数据之间使用外部联接以查找新数据,然后仅保存新数据(作为parquest)。如果要使用外部联接,我仍然需要读取所有历史数据:(我在考虑某种检查点。@MorcosMacska无需阅读整个历史,您可以在处理当天进行过滤,若您将拼花地板存储在分区中,则在获取时会对其进行修剪