有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用JavaSpark有效地处理数百万条记录

我是JavaSpark的新手
我需要比较和处理数百万条记录,我使用了纯java多线程,但我想用spark的方式来提高性能

问题陈述:
我们的数据库中有数百万条记录,我需要将其与另一个列表进行比较并进行处理
示例:
步骤1:我们有一个列表1,其中包含从文件系统获取的一百万个字符串(这没有问题)
步骤2:我们正在从数据库中获得另外一百万条记录并添加到列表2中
步骤3:迭代并比较List1元素和List2(如果List2中存在List1元素,则更新数据库中的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); 

上面的代码对性能没有太大影响,有人能提出更好的解决方案吗


共 (0) 个答案