我正在使用使用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-redshift维护者在这里。

使用较新版本的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

10-07 13:20
查看更多