Apache Spark并发程序示例

时间:2017-08-09 06:08:57

标签: apache-spark concurrency

我希望以下简单的hello world程序在Apache Spark中并行执行100次。

  public class SimpleHelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
  }

因此,在并行执行后,它应该打印“Hello World”100次。

如何在独立的Apache Spark中执行此操作?

3 个答案:

答案 0 :(得分:2)

取决于你真正想要的东西:

  1. Spark-Driver中的多线程:例如
  2. 
        import scala.collection.parallel._
        import scala.concurrent.forkjoin._
        val pool = (0 to 100).par
        // ThreadPool with 100 concurrent Threads
        pool.tasksupport = new ForkJoinTaskSupport(new ForkJoinPool(100))
        pool.foreach(i => {
            println("Hello World")
        })
    
    
    1. "多线程"每个Spark-Executor任务:例如
    2. 
          // create 100 partitions
          var df = sc.parallelize(1 to 100, 100).toDF()
          // print "hello world" per each partition
          df.foreachPartition(_ => println("Hello World"))
      
      

答案 1 :(得分:0)

这将使用Spark 2.x在Scala中执行您想要的操作:

sparkSession.range(100)
.foreach(_ => println("Hello World"))

但是你不会在驱动程序上看到打印的行,因为它们是在工作节点上执行的。

答案 2 :(得分:0)

嗨,如果你想在这种情况下运行火花机。

对于Spark工作,您需要首先启动RDD。然后使用Spark动作或转换函数进行数据计算。此外,它会自动并行运行。

   public class hello world {

        public static void main(String[] args) throws Exception {

                try (JavaSparkContext sc = setupSparkContext()) {

            JavaRDD<String> helloworldRDD = sc.textFile("//your hellworld file");
                helloworldRDD.map(x->{
                    for (int i=0;i<100;i++){

                        System.out.println(x);

                    }
                    return x;

                }).collect();
        }
        }

        private static JavaSparkContext setupSparkContext() {

            SparkConf sc = new SparkConf();

            return App.getSparkContext("helloworld", sc);
        }
    }