我正在尝试阅读下面的avro文件
val rdd = sc.hadoopFile(
classOf[org.apache.avro.mapred.AvroInputFormat[MyAvroRecord]],
classOf[org.apache.avro.mapred.AvroWrapper[MyAvroRecord]],
classOf[org.apache.hadoop.io.NullWritable])(avropath)
val collectedData = rdd.collect()
for (s <- collectedData){
println(s)
}
然而,当我打印相同时它会给出重复的值。有没有办法从RDD获取有效值。
答案 0 :(得分:2)
在执行收集之前添加rdd.map(_._1.datum)
。
&#39;&#39;&#39;注意:&#39;&#39;&#39;因为Hadoop的RecordReader类为每条记录重复使用相同的Writable对象,所以直接缓存返回的RDD或直接将其传递给聚合或shuffle操作将创建对同一对象的许多引用。如果您计划直接缓存,排序或聚合Hadoop可写对象,则应首先使用map函数复制它们。