Как эффективно обработать миллион записей с помощью JavaSpark - PullRequest
2 голосов
/ 31 января 2020

Я новичок в 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); 

Приведенный выше код не оказал большого влияния на производительность. Может кто-нибудь предложить лучшее решение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...