繁体   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