java-AWS EMR上的avro错误

我正在使用使用avro进行传输的spark-redshift(https://github.com/databricks/spark-redshift).

从Redshift读取是可以的,而在写入时

Caused by: java.lang.NoSuchMethodError: org.apache.avro.generic.GenericData.createDatumWriter(Lorg/apache/avro/Schema;)Lorg/apache/avro/io/DatumWriter

尝试使用Amazon EMR 4.1.0(Spark 1.5.0)和4.0.0(Spark 1.4.1).
不会

import org.apache.avro.generic.GenericData.createDatumWriter

要么,只是

import org.apache.avro.generic.GenericData

我正在使用scala shell
尝试下载其他几个avro-mapred和avro jars,尝试设置

{"classification":"mapred-site","properties":{"mapreduce.job.user.classpath.first":"true"}},{"classification":"spark-env","properties":{"spark.executor.userClassPathFirst":"true","spark.driver.userClassPathFirst":"true"}}

并添加这些jar来激发classpath.可能需要以某种方式调整Hadoop(EMR).

这会给任何人敲响钟声吗?

解决方法:

火花红移维护者在这里.

使用较新版本的spark-avro库(spark-redshift依赖于此)时,其他EMR用户也遇到了类似的错误.简而言之,问题似乎在于EMR的旧版本Avro优先于spark-avro所需的新版本.在https://github.com/databricks/spark-avro/issues/91(一个似乎与此处报告的异常相匹配的问题)处,一个用户建议将Avro JAR嵌入其应用程序代码:https://github.com/databricks/spark-avro/issues/91#issuecomment-142543149

上一篇:java-Maven无法找到符号,但独立的构建工程


下一篇:Knockout.Js官网学习(加载或保存JSON数据)