簡體   English   中英

Spark Java Map 函數被執行兩次

[英]Spark Java Map function is getting executed twice

我有上面的代碼作為 Spark 驅動程序,當我執行我的程序時,它可以正常將所需的數據保存為 Parquet 文件。

String indexFile = "index.txt";
JavaRDD<String> indexData = sc.textFile(indexFile).cache();
JavaRDD<String> jsonStringRDD = indexData.map(new Function<String, String>() {
  @Override
  public String call(String patientId) throws Exception {
   return "json array as string"
  }   
}); 

//1. Read json string array into a Dataframe (execution 1)
DataFrame dataSchemaDF = sqlContext.read().json(jsonStringRDD );
//2. Save dataframe as parquet file (execution 2)
dataSchemaDF.write().parquet("md.parquet");

但是我觀察到我在 RDD indexData上的映射器函數被執行了兩次。 首先,當我使用SQLContext jsonStringRdd作為DataFrame讀取時 第二,當我將dataSchemaDF寫入鑲木地板文件時

你能指導我嗎,如何避免這種重復執行? 還有其他更好的方法可以將 JSON 字符串轉換為 Dataframe 嗎?

我相信原因是缺少 JSON 閱讀器的模式。 執行時:

sqlContext.read().json(jsonStringRDD);

Spark 必須為新創建的DataFrame推斷架構。 為此,它具有掃描輸入 RDD 並且急切地執行此步驟

如果你想避免它,你必須創建一個StructType來描述 JSON 文檔的形狀:

StructType schema;
...

並在創建DataFrame時使用它:

DataFrame dataSchemaDF = sqlContext.read().schema(schema).json(jsonStringRDD);

暫無
暫無

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

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