将 spark-avro jar 引导至 Amazon EMR 集群

Bootstrapping spark-avro jar to Amazon EMR cluster

我想从 Zeppelin 笔记本读取位于 Amazon S3 中的 avro 文件。我知道 Databricks 有一个很棒的包 spark-avro。为了 bootstrap 这个 jar 文件到我的集群并使其正常工作,我需要采取哪些步骤?

当我在笔记本上写这个的时候, val df = sqlContext.read.avro("s3n://path_to_avro_files_in_one_bucket/")

我收到以下错误 - <console>:34: error: value avro is not a member of org.apache.spark.sql.DataFrameReader

我看过this。我想那里发布的解决方案不适用于最新版本的 Amazon EMR。

如果有人能给我指点,那真的很有帮助。

下面是我如何关联 spark-avro 依赖项。此方法适用于将任何其他依赖项关联到 spark。

  1. 确保您的 spark 版本与您的 spark-avro 兼容。您会找到依赖项的详细信息 here.

  2. 我将我的 spark-avro 文件放在我的 S3 存储桶中。您可以使用 hdfs 或任何其他存储。

  3. 在启动 EMR 集群时,在配置中添加以下 JSON, [{"classification":"spark-defaults", "properties":{"spark.files":"/path_to_spark-avro_jar_file", "spark.jars":"/path_to_spark-avro_jar_file"}, "configurations":[]}]

这不是唯一的方法。请参阅此 link 了解更多详情。

另一种选择是将 --dependencies 选项添加到 spark-shell 或 spark submit(这是针对 spark 2.x)

--packages com.databricks:spark-avro_2.11:4.0.0