从avro架构生成的类的Spark问题

时间:2015-10-08 23:59:16

标签: serialization apache-spark avro

我有一段用spark编写的代码,它将HDFS中的数据加载到avro idl生成的java类中。在以这种方式创建的RDD上,我正在执行简单的操作,结果取决于我是否在它之前缓存RDD 即如果我在下面运行代码

val loadedData = loadFromHDFS[Data](path,...)
println(loadedData.map(x => x.getUserId + x.getDate).distinct().count()) // 200000

程序将打印200000,另一方面执行下一个代码

val loadedData = loadFromHDFS[Data](path,...).cache()
println(loadedData.map(x => x.getUserId + x.getDate).distinct().count()) // 1

导致1打印到标准输出。

当我在读取缓存数据后检查字段的值时,似乎

我很确定所述问题的根本原因是avro idl生成的类的序列化问题,但我不知道如何解决它。我尝试使用Kryo,注册生成的类(Data),从chill_avro注册给定类(SpecificRecordSerializer,SpecificRecordBinarySerializer等)的不同序列化程序,但这些想法都没有帮助我。

我如何解决这个问题?

Link最小,完整,可验证的例子。

1 个答案:

答案 0 :(得分:0)

尝试下面的代码 -

<script src="https://d3js.org/d3.v4.min.js"></script>
<script src="https://d3js.org/topojson.v1.min.js"></script>

<div id="map" text-align="center" style="width:100%; height:100%;">
  <div id="globe"></div>
</div>