【发布时间】:2015-10-12 19:23:11
【问题描述】:
我正在使用以下代码在 spark 中读取 avro:
val inputData = sc.hadoopFile(inputPath,
classOf[AvroInputFormat[GenericRecord]],
classOf[AvroWrapper[GenericRecord]]).map(t =>
{ val genericRecord = t._1.datum()
(String)genericRecord.get("name") });
加载部分工作正常,但转换为字符串部分失败:
Caused by: java.lang.ClassCastException: org.apache.avro.util.Utf8 cannot be cast to java.lang.String
为了简化示例,我使用一行
(String)genericRecord.get("name")
实际上,该部分来自一个库,在 hadoop map reduce 作业中使用得很好。但是,当我现在在 spark 中使用该库时,由于上述异常,它失败了。
我知道我可以将代码更改为genericRecord.get("name").toString() 以使其工作,但是因为我在另一个hadoop mapreduce 作业中使用它很好,我希望所有的utf8 都可以自动转换为字符串,这样我就不会需要更改所有代码逻辑。
总结一下,如何让GenericRecord中的所有org.apache.avro.util.Utf8自动转换成java.lang.String?
【问题讨论】:
标签: hadoop apache-spark avro