簡體   English   中英

Apache Spark:更新worker中的全局變量

[英]Apache Spark: Update global variables in workers

我很好奇以下簡單的代碼是否可以在分布式環境中工作(它在獨立的情況下是否可以正常工作)?

public class TestClass {
    private static double[][] testArray = new double[4][];
    public static void main(String[] args) {
        for(int i = 0; i<4; i++)
        {
            testArray[i] = new double[10];
        }
        ...
        JavaRDD<String> testRDD = sc.textFile("testfile", 4).mapPartitionsWithIndex(
            new Function2<Integer, Iterator<String>, Iterator<String> >() {
                @Override
                public Iterator<String> call(Integer ind, Iterator<String> s) {
                    /*Update testArray[ind]*/
                }
            }, true
        );
    ...

如果它應該工作,我想知道Spark如何將testArray的部分從worker發送到主節點?

不,它不應該在分布式環境中工作。

閉包中捕獲的變量將被序列化並發送給工人。 最初在驅動程序中設置的數據將可供工作人員使用,但工作人員級別的任何更新只能在本地范圍內訪問。

在本地,變量位於相同的內存空間中,因此您可以看到更新,但不會擴展到群集。

您需要根據RDD操作轉換計算以收集結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM