Я новичок в JavaSpark
У меня возникло требование сравнивать и обрабатывать миллионы записей, я использовал простую java многопоточность, но хочу сделать это искрометно, чтобы повысить производительность
Проблема Утверждение:
В нашей базе данных есть миллионы записей, мне нужно сравнить ее с другим списком и обработать.
Пример:
Шаг 1. У нас есть List1 с миллионами строк, извлеченных из файловой системы (это не есть проблема).
Шаг 2: Мы получаем еще миллион записей из базы данных и добавляем их в List2.
Шаг 3: повторяем и сравниваем элементы List1 с List2 (если элемент List1 существует в List2, обновите элемент List2 в базе данных )
Задача
Шаг 2 и Шаг 3, занимающие много времени, как преобразовать эту формулировку проблемы в способ JavaSpark для повышения производительности.
Что я пробовал?
List paths (this contains million strings)
Iterator<T> oneMillionRecords =
database.fetching();// this is taking time
Iterable<T> iterable = () -> oneMillionRecords;
JavaRDD<T> parentPathRDDs = javaSparkContext.parallelize(
StreamSupport.stream(iterable.spliterator(), false)
.collect(Collectors.toList()));
List<T> avaliableResources = parentPathRDDs.filter(r -> {
return paths.contains(r.getPath()));
}).map(dr->{dr.setXXX("YYY"); return dr;}).collect();
List<T> unreachableResources = parentPathRDDs.filter(r -> {
return (!paths.contains(r.getPath())));
}).map(dr->{dr.setX("ZZZ"); return dr;}).collect();
List<T> allRes = new ArrayList<>();
allRes.addAll(avaliableResources);
allRes.addAll(unreachableResources);
resourcesToUpdate.addAll(allRes);
Приведенный выше код не оказал большого влияния на производительность. Может кто-нибудь предложить лучшее решение?