Spark 支持哪些版本的 avro 和 parquet 格式?

What versions of avro and parquet formats does Spark support?

Spark 2.0 是否支持 avro 和 parquet 文件?什么版本?

我已经下载 spark-avro_2.10-0.1.jar 并在加载过程中遇到此错误:

Name: java.lang.IncompatibleClassChangeError
Message: org.apache.spark.sql.sources.TableScan
StackTrace:   at java.lang.ClassLoader.defineClassImpl(Native Method)
  at java.lang.ClassLoader.defineClass(ClassLoader.java:349)
  at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:154)
  at java.net.URLClassLoader.defineClass(URLClassLoader.java:727)
  at java.net.URLClassLoader.access0(URLClassLoader.java:95)
  at java.net.URLClassLoader$ClassFinder.run(URLClassLoader.java:1182)
  at java.security.AccessController.doPrivileged(AccessController.java:686)
  at java.net.URLClassLoader.findClass(URLClassLoader.java:602)

Does spark 2.0 supports avro and parquet files?

开箱即用的 Spark 2.x 不支持 Avro 格式。您必须使用外部包,例如spark-avro.

Name: java.lang.IncompatibleClassChangeError
Message: org.apache.spark.sql.sources.TableScan

java.lang.IncompatibleClassChangeError 的原因是您使用了为 Scala 2.10 编译的 spark-avro_2.10-0.1.jar,但 Spark 2.0 使用 Scala 2.11 默认。这不可避免地导致这个 IncompatibleClassChangeError 错误。

您应该使用 --packages 命令行选项加载 spark-avro 包(如 With spark-shell or spark-submit 中 spark-avro 的官方文档所述):

$ bin/spark-shell --packages com.databricks:spark-avro_2.11:3.2.0

using --packages ensures that this library and its dependencies will be added to the classpath. The --packages argument can also be used with bin/spark-submit.


Parquet 格式是加载或保存数据集时的默认格式。

// loading parquet datasets
spark.read.load

// saving in parquet format
mydataset.write.save

您可能需要阅读官方文档中的 Parquet Files 支持:

Spark SQL provides support for both reading and writing Parquet files that automatically preserves the schema of the original data.

使用了 Parquet 1.8.2(正如您在 Spark 中看到的 pom.xml

您只是使用了错误的依赖项。您应该使用使用 Scala 2.11 编译的 spark-avro 依赖项。你可以找到它here

至于 parquet,无需添加任何依赖项即可支持它。