4
我有上面的代碼作爲spark驅動程序,當我執行我的程序時,它可以正常工作將所需數據保存爲parquet文件。Spark java地圖函數執行兩次
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
上的映射函數正在執行兩次。 第一,當我讀到jsonStringRdd
如使用SQLContext
二DataFrame
,當我寫的dataSchemaDF
到拼花文件
你可以指導我在這,如何避免這種重複執行?有沒有其他更好的方法將json字符串轉換爲Dataframe?
你在哪裏看到兩張地圖? RDD's被懶惰地評估。 'map'操作是一個轉換,而不是一個操作,所以'jsonStringRDD'的分配不應該立即運行。也許用於讀取數據框和寫入鑲木地板的執行路徑都需要收集RDD。 –
我在mapper函數中有日誌語句,我在日誌中看到它們兩次。 – blob