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
.
Какой из них быстрее или есть лучший способ решить эту проблему?