Wikidata几乎每天都会发布新的转储文件(非常大的文件),从一个版本到另一个版本的更改很少。面临的挑战是仅处理当前版本中的新行。
例如,比较今天和昨天发布的内容。
release_today release_yesterday
----------------- ----------------
ABCD ABCD
EFGH EFGH
IJKL
MNOP
目标是仅处理今天的新行(IJKL
,MNOP
)。
我可以想到两种方法
1-读取两个文件并使用减法
rdd = spark_context.textFile(release_today).subtract(spark_context.textFile(release_yesterday))
2-将两个文件聚合为一个并过滤重复项
cat today_release > all_release
cat yesterday_release >> all_release
spark_context.textFile('all_release').map(lambda line: (line,1)).reduceByKey(lambda a, b: a + b).filter(lambda x: x[1]<2)
我不知道哪种方法更好,reading two very large files and subtract
或reading one even bigger file followed by a map-reduce/filter operation
。
解决这个问题的速度更快还是有更好的方法?