【发布时间】:2014-01-03 22:35:20
【问题描述】:
我在 Spark 中,我有一个来自 Avro 文件的 RDD。我现在想对该 RDD 进行一些转换并将其保存为 Avro 文件:
val job = new Job(new Configuration())
AvroJob.setOutputKeySchema(job, getOutputSchema(inputSchema))
rdd.map(elem => (new SparkAvroKey(doTransformation(elem._1)), elem._2))
.saveAsNewAPIHadoopFile(outputPath,
classOf[AvroKey[GenericRecord]],
classOf[org.apache.hadoop.io.NullWritable],
classOf[AvroKeyOutputFormat[GenericRecord]],
job.getConfiguration)
运行此 Spark 时抱怨 Schema$recordSchema 不可序列化。
如果我取消注释 .map 调用(并且只有 rdd.saveAsNewAPIHadoopFile),则调用成功。
我在这里做错了什么?
有什么想法吗?
【问题讨论】:
-
能否提供异常堆栈跟踪? Spark、Hadoop 和 Avro 版本号也可能有用。
-
请原谅我的幼稚。请问这里的工作是做什么的?看起来这是一个地图减少工作?如果我们使用 spark 写出,为什么我们需要 map reduce 作业?
标签: scala serialization avro apache-spark