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