Spark newAPIHadoopFile()导致重复

时间:2018-01-16 12:02:23

标签: java apache-spark

我正在尝试使用newAPIHadoopFile从磁盘读取100个不同的Avro记录,但在收集后我最终得到一个包含重复100次的最终记录的列表。

我注意到提到的API文档首先映射数据,但没有区别:

  

注意:因为Hadoop的RecordReader类重用了相同的内容   每条记录的可写对象,直接缓存返回的   RDD将创建对同一对象的许多引用。如果你有计划   要直接缓存Hadoop可写对象,首先应该复制它们   使用map函数。

示例代码:

JavaPairRDD<AvroKey, NullWritable> testRDD = sc.newAPIHadoopFile(dataSource.getFileDir(), AvroKeyInputFormat.class, AvroKey.class, NullWritable.class, new Configuration());
List<Object> collect = testRDD.map(a -> a._1.datum()).collect();

但是,使用以下内容似乎按预期打印出记录:

JavaPairRDD<AvroKey, NullWritable> testRDD = sc.newAPIHadoopFile(dataSource.getFileDir(), AvroKeyInputFormat.class, AvroKey.class, NullWritable.class, new Configuration());
testRDD.foreach(a -> System.out.println(a._1.datum().toString()));

我正在使用Spark 1.6。

Spark Context初始化为:

SparkConf conf  = new SparkConf()
            .setMaster("local")
            .setAppName("TestApp")
            .set("spark.serializer", "org.apache.spark.serializer.KryoSerializer");
sc = new JavaSparkContext(conf);

0 个答案:

没有答案