写给Spark Avro失败了

时间:2016-09-28 22:14:40

标签: pyspark spark-dataframe mapr

我们有一个MapR集群,它正在运行但现在突然停止,甚至无法在mapr演示集群上运行。我们正在运行MapR 5.1和Spark 1.6.1。

MyClass<444444444, uint32_t>

但现在我收到了这个错误:

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()

有什么想法吗?这是根据databricks github上的说明。我正在使用这些包调用pyspark shell或spark-submit:

java.lang.IllegalAccessError: tried to access class org.apache.avro.SchemaBuilder$FieldDefault from class    com.databricks.spark.avro.SchemaConverters$$anonfun$convertStructToAvro$1

1 个答案:

答案 0 :(得分:0)

过去我遇到过这个错误,但pyspark却没有。我希望我的经验可以提供帮助。

事实证明,有一个配置错误的Java CLASSPATH将avro-1.7.5.jar置于其他任何人之前。您可以通过确保群集配置使用avro-1.7.7.jar来解决此问题。

您通常可以将spark.driver.userClassPathFirstspark.executor.userClassPathFirst配置变量设置为true来完成此操作。

特定错误是由Avro在1.7.5和1.7.6之间的变化触发的(见https://github.com/apache/avro/blob/release-1.7.5/lang/java/avro/src/main/java/org/apache/avro/SchemaBuilder.java#L2136