我有一個火花主&工人Docker容器火花2.0.2和Hadoop 2.7運行。我試圖通過運行的NoSuchMethodError使用Databricks星火的Avro 3.2.0
df = spark.read.json("/data/test.json")
df.write.format("com.databricks.spark.avro").save("/data/test.avro")
從不同的容器(同一網絡)pyspark提交一份工作,但我得到這個錯誤:
java.lang.NoSuchMethodError: org.apache.avro.generic.GenericData.createDatumWriter(Lorg/apache/avro/Schema;)Lorg/apache/avro/io/DatumWriter;
這沒有什麼區別,如果我嘗試交互式或者用spark-submit。這些都是我裝包火花:
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-submit --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.
階版本是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-submit script.py --master spark://master:7077 --packages com.databricks:spark-avro_2.11:3.2.0,org.apache.avro:avro:1.8.1
我讀過here,這可能是由於「舊版本avro被使用」造成的,所以我嘗試使用1.8.1,但我一直得到相同的錯誤。閱讀avro工作正常。任何幫助?
這是我的錯誤,'script.py'應'火花submit'參數後走,但不是錯誤的原因。該應用程序確實正在註冊星火網頁UI。我已經發現問題並解決方案和即將發佈它。基本上,Hadoop包含一個avro(1.7.4)庫,如果類路徑設置不正確,可以使用它來代替所需的庫。 – arinarmo
你可以請你發佈你如何解決問題到底?我遇到同樣的問題。 – hiddenbit
剛剛發佈我的解決方案 – arinarmo