簡體   English   中英

在Java Spark中迭代大型DataSet的最快有效方法

[英]Fastest And Effective Way To Iterate Large DataSet in Java Spark

我通過使用以下方法將spark數據集轉換為哈希映射列表,我的最終目標是構建json對象列表或哈希映射列表我在3.2百萬行上運行此代碼

List<HashMap> finalJsonMap = new ArrayList<HashMap>();
    srcData.foreachPartition(new ForeachPartitionFunction<Row>() {
        public void call(Iterator<Row> t) throws Exception {
            while (t.hasNext()){
                Row eachRow = t.next();
                HashMap rowMap = new HashMap();
                for(int j = 0; j < grpdColNames.size(); j++) {
                    rowMap.put(grpdColNames.get(j), eachRow.getString(j));  
                }
                finalJsonMap.add(rowMap);
            }
        }
    });

迭代工作正常但我無法將rowMap添加到finalJsonMap中。

這樣做的最佳方法是什么?

這真的不是Spark的工作方式。

放在foreachPartition的代碼在與原始不同的上下文中執行

List<HashMap> finalJsonMap = new ArrayList<HashMap>();

您在此類設置中所能做的就是修改本地副本。

這已在Stack Overflow上多次討論過,並在“了解閉包”部分的官方文檔中有詳細描述。

考慮到所需的結果(即本地收集),除了將代碼轉換為使用mapPartitionscollect之外,沒有什么可以做的。 然而,這在Spark中幾乎沒有效率或慣用。

我強烈建議您重新考慮當前的設計。

暫無
暫無

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

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