Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 使用Databricks Spark Avro 3.2.0时无任何方法错误_Apache Spark_Avro_Databricks_Spark Avro - Fatal编程技术网

Apache spark 使用Databricks Spark Avro 3.2.0时无任何方法错误

Apache spark 使用Databricks Spark Avro 3.2.0时无任何方法错误,apache-spark,avro,databricks,spark-avro,Apache Spark,Avro,Databricks,Spark Avro,我有一个spark master&worker运行在带有spark 2.0.2和hadoop 2.7的Docker容器中。我试图通过运行 df = spark.read.json("/data/test.json") df.write.format("com.databricks.spark.avro").save("/data/test.avro") 但我得到了一个错误: java.lang.NoSuchMethodError: org.apache.avro.generic.Generic

我有一个spark master&worker运行在带有spark 2.0.2和hadoop 2.7的Docker容器中。我试图通过运行

df = spark.read.json("/data/test.json")
df.write.format("com.databricks.spark.avro").save("/data/test.avro")
但我得到了一个错误:

java.lang.NoSuchMethodError: org.apache.avro.generic.GenericData.createDatumWriter(Lorg/apache/avro/Schema;)Lorg/apache/avro/io/DatumWriter;
如果我尝试以交互方式或使用spark submit,则没有什么区别。这些是我在spark中加载的软件包:

com.databricks#spark-avro_2.11;3.2.0 from central in [default]
com.thoughtworks.paranamer#paranamer;2.7 from central in [default]
org.apache.avro#avro;1.8.1 from central in [default]
org.apache.commons#commons-compress;1.8.1 from central in [default]
org.codehaus.jackson#jackson-core-asl;1.9.13 from central in [default]
org.codehaus.jackson#jackson-mapper-asl;1.9.13 from central in [default]
org.slf4j#slf4j-api;1.7.7 from central in [default]
org.tukaani#xz;1.5 from central in [default]
org.xerial.snappy#snappy-java;1.1.1.3 from central in [default]
spark提交--version
输出:

Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 2.0.2
      /_/

Branch 
Compiled by user jenkins on 2016-11-08T01:39:48Z
Revision 
Url 
Type --help for more information.
scala版本是2.11.8

我的pyspark命令:

PYSPARK_PYTHON=ipython /usr/spark-2.0.2/bin/pyspark --master spark://master:7077 --packages com.databricks:spark-avro_2.11:3.2.0,org.apache.avro:avro:1.8.1
我的spark提交命令:

spark-submit script.py --master spark://master:7077 --packages com.databricks:spark-avro_2.11:3.2.0,org.apache.avro:avro:1.8.1

我曾读到,这可能是由于“使用了旧版本的avro”造成的,所以我尝试使用1.8.1,但我一直收到相同的错误。阅读avro很好。有什么帮助吗?

我以前也遇到过类似的问题。
尝试使用--jars{path to spark-avro_2.11-3.2.0.jar}spark submit

此错误的原因是默认情况下hadoop中包含apache avro版本1.7.4,并且如果
spark_DIST_类路径
环境变量包含hadoop公共(
$hadoop_HOME/share/common/lib//code>)在ivy2 JAR之前,可能会使用错误的版本,而不是spark avro(>=1.7.6)要求的版本,并安装在ivy2中

要检查是否存在这种情况,请打开火花壳并运行

sc.getClass().getResource("/org/apache/avro/generic/GenericData.class")
这将告诉您类的位置,如下所示:

java.net.URL = jar:file:/lib/ivy/jars/org.apache.avro_avro-1.7.6.jar!/org/apache/avro/generic/GenericData.class
如果该类指向
$HADOOP\u HOME/share/common/lib/
,则必须在
SPARK\u DIST\u CLASSPATH
env变量中HADOOP common之前包含ivy2 JAR

例如,在Dockerfile中

ENV SPARK_DIST_CLASSPATH="/home/root/.ivy2/*:$HADOOP_HOME/etc/hadoop/*:$HADOOP_HOME/share/hadoop/common/lib/*:$HADOOP_HOME/share/hadoop/common/*:$HADOOP_HOME/share/hadoop/hdfs/*:$HADOOP_HOME/share/hadoop/hdfs/lib/*:$HADOOP_HOME/share/hadoop/hdfs/*:$HADOOP_HOME/share/hadoop/yarn/lib/*:$HADOOP_HOME/share/hadoop/yarn/*:$HADOOP_HOME/share/hadoop/mapreduce/lib/*:$HADOOP_HOME/share/hadoop/mapreduce/*:$HADOOP_HOME/share/hadoop/tools/lib/*"

注意:
/home/root/.ivy2
是ivy2 jar的默认位置,您可以通过在
spark defaults.conf
中设置
spark.jars.ivy
来操作它,这可能是个好主意。

这是我的一个错误,
script.py
应该在
spark submit
参数之后,但这不是错误的原因。该应用程序确实正在Spark Web UI中注册。我已经找到了问题和解决方案,并将很快发布。基本上,Hadoop包含一个avro(1.7.4)库,如果类路径设置不正确,可以使用该库来代替所需的库。你能告诉我你最终是如何解决这个问题的吗?我遇到了同样的问题。刚刚发布了我的解决方案