我正在使用使用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