2017-08-09 38 views
0

我希望以下簡單的Hello World程序在Apache Spark中並行執行100次。Apache Spark併發程序示例

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

所以在並行執行後,它應該打印「Hello World」100次。

我該如何在獨立的Apache Spark中執行此操作?

+0

你意識到你將不會看到「Hello World」,因爲這些語句在工作節點上執行? –

+0

感謝您的評論! 我可以在哪裏定義將運行此程序的線程/節點的數量?我的意思是如何在這裏啓動多線程? – pankaj

回答

0

這將做你想做的事,斯卡拉星火2.X:

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

但你不會看到駕駛員的印刷線,因爲他們的工作節點上執行。

+0

謝謝拉斐爾! 你能解釋一下sparkSession.range會做什麼嗎? – pankaj

+0

@ pankaj它會生成一個數據集[Long],其值​​爲0到99 –

+0

我的要求是,我想獨立運行這個程序,它們之間沒有RDD共享。我的程序將從一些Web服務中獲取數據並進行計算,然後存儲到數據庫中。火花是不錯的選擇來發起平行的獨立任務嗎? – pankaj

0

嗨,如果你想在這種情況下運行火花機。

對於需要首先啓動RDD的Spark作業。然後使用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); 
     } 
    } 
2

取決於你真正想要的:

  1. 多線程火花驅動程序:如
 

    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") 
    }) 

  • 「多線程」 每火花執行人任務:例如
  •  
    
        // create 100 partitions 
        var df = sc.parallelize(1 to 100, 100).toDF() 
        // print "hello world" per each partition 
        df.foreachPartition(_ => println("Hello World"))