java - 如何使用单个 Spark 上下文在 Apache Spark 中运行并发作业(操作)

标签 java concurrency apache-spark


Apache Spark 文档中表示“在每个 Spark 应用程序中,如果多个“作业”(Spark 操作)由不同线程提交,则可能会同时运行”。有人可以解释如何为以下示例代码实现这种并发吗?

    SparkConf conf = new SparkConf().setAppName("Simple_App");
    JavaSparkContext sc = new JavaSparkContext(conf);

    JavaRDD<String> file1 = sc.textFile("/path/to/test_doc1");
    JavaRDD<String> file2 = sc.textFile("/path/to/test_doc2");

    System.out.println(file1.count());
    System.out.println(file2.count());

这两个作业是独立的,必须同时运行。
谢谢。

最佳答案

尝试这样的事情:

    final JavaSparkContext sc = new JavaSparkContext("local[2]","Simple_App");
    ExecutorService executorService = Executors.newFixedThreadPool(2);
    // Start thread 1
    Future<Long> future1 = executorService.submit(new Callable<Long>() {
        @Override
        public Long call() throws Exception {
            JavaRDD<String> file1 = sc.textFile("/path/to/test_doc1");
            return file1.count();
        }
    });
    // Start thread 2
    Future<Long> future2 = executorService.submit(new Callable<Long>() {
        @Override
        public Long call() throws Exception {
            JavaRDD<String> file2 = sc.textFile("/path/to/test_doc2");
            return file2.count();
        }
    });
    // Wait thread 1
    System.out.println("File1:"+future1.get());
    // Wait thread 2
    System.out.println("File2:"+future2.get());

关于java - 如何使用单个 Spark 上下文在 Apache Spark 中运行并发作业(操作),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35099463/

相关文章:

Java swing GUI 卡住

java - 使用 Java 从命名管道连续读取

c - epoll 事件循环内阻塞操作的解决方案

hadoop - Spark 分区修剪在 1.6.0 上不起作用

python - pyspark:从现有列创建 MapType 列

java - WAR 不会部署到 Tomcat 7.0.19

java - 如何在 javafxports-Application 中使用外部 Jars

java - ReentrantLock 替代 CountdownLatch

java - 对来自异步线程的信号使用静态 boolean 值与 AtomicBoolean 之间的区别

apache-spark - Spark - 按键对 DStream 进行排序并限制为 5 个值