Pyspark 写信给Spark Avro失败了

Pyspark 写信给Spark Avro失败了,pyspark,spark-dataframe,mapr,Pyspark,Spark Dataframe,Mapr,我们有一个MapR集群,它正在运行,但现在突然停止,甚至不能在MapR演示集群上运行。我们正在运行MAPR5.1和Spark 1.6.1 from pyspark import SparkConf, SparkContext from pyspark import HiveContext from pyspark.sql import DataFrameWriter conf = SparkConf().setAppName('test') sc = SparkContext(conf=conf

我们有一个MapR集群,它正在运行,但现在突然停止,甚至不能在MapR演示集群上运行。我们正在运行MAPR5.1和Spark 1.6.1

from pyspark import SparkConf, SparkContext
from pyspark import HiveContext
from pyspark.sql import DataFrameWriter
conf = SparkConf().setAppName('test')
sc = SparkContext(conf=conf)
sqlContext = HiveContext(sc)

df = sqlContext.createDataFrame([(2012, 8, "Batman", 9.8), (2012, 8, "Hero", 8.7), (2012, 7, "Robot", 5.5), (2011, 7, "Git", 2.0)],["year", "month", "title", "rating"])
df.show()
  df.write.mode("append").format("com.databricks.spark.avro").save("/user/bedrock/output_avro")
sc.stop()
但现在我得到了这个错误:

java.lang.IllegalAccessError: tried to access class org.apache.avro.SchemaBuilder$FieldDefault from class    com.databricks.spark.avro.SchemaConverters$$anonfun$convertStructToAvro$1
有什么想法吗?这是根据databricks github上的说明进行的。我使用以下软件包调用pyspark shell或spark submit:

/opt/mapr/spark/spark-1.6.1/bin/pyspark --packages com.databricks:spark-avro_2.10:2.0.1 --driver-class-path /opt/mapr/spark/spark-1.6.1/lib/avro-1.7.7.jar --conf spark.executor.extraClassPath=/opt/mapr/spark/spark-1.6.1/lib/avro-1.7.7.jar --master yarn-client

我在过去经历过这个错误,但pyspark没有。我希望我的经验能有所帮助

结果是,有一个配置不好的Java类路径将
avro-1.7.5.jar
放在了任何其他类路径之前。您可以通过确保集群配置使用
avro-1.7.7.jar
来解决这个问题

通常可以通过将
spark.driver.userClassPathFirst
spark.executor.userClassPathFirst
配置变量设置为
true
来实现这一点


具体错误由1.7.5和1.7.6之间对Avro的更改触发(请参见)

@zero323,您对此有何意见?