将数据框另存为AVRO Spark 2.4.0

时间:2018-11-27 15:23:57

标签: python apache-spark pyspark avro

自Spark 2.4.0起,可以在没有外部jar的情况下另存为AVRO。但是我根本无法正常工作。我的代码如下:

key = 'filename.avro'
df.write.mode('overwrite').format("avro").save(key)

我收到以下错误:

pyspark.sql.utils.AnalysisException: 'Failed to find data source: avro. Avro is built-in but external data source module since Spark 2.4. Please deploy the application as per the deployment section of "Apache Avro Data Source Guide".;'

因此,我看一下《 Apache Avro数据源指南》(https://spark.apache.org/docs/latest/sql-data-sources-avro.html),它给出了以下示例:

df=spark.read.format("avro").load("examples/src/main/resources/users.avro")

df.select("name","favorite_color").write.format("avro").save("namesAndFavColors.avro")

是一样的,所以我迷路了。任何人都知道出了什么问题吗?

2 个答案:

答案 0 :(得分:0)

您链接的文档明确指出:

  

spark-avro模块是外部模块,默认情况下不包含在spark-submit或spark-shell中。

并进一步说明如何包含该软件包。

您的声明:

  

自Spark 2.4.0起,可以在没有外部jar的情况下另存为AVRO。高

只是不正确。

答案 1 :(得分:0)

spark-avro模块是外部模块,默认情况下不包含在spark-submit或spark-shell中。

与任何Spark应用程序一样,spark-submit用于启动您的应用程序。 spark-avro_2.11及其依赖项可以使用--packages(例如,

)直接添加到spark-submit中
./bin/spark-submit --packages org.apache.spark:spark-avro_2.11:2.4.0 ...

要在spark-shell上进行实验,还可以使用--packages直接添加org.apache.spark:spark-avro_2.11及其依赖项,

./bin/spark-shell --packages org.apache.spark:spark-avro_2.11:2.4.0 ...