【问题标题】:Spark reading Avro fileSpark 读取 Avro 文件
【发布时间】:2019-05-11 22:11:18
【问题描述】:

我正在使用 com.databricks.spark.avro。当我像这样从 spark-shell 运行它时:spark-shell --jar spark-avro_2.11-4.0.0.jar,我可以通过这样做来读取文件:

import org.apache.spark.sql.SQLContext
val sqlContext = new SQLContext(sc)
val avroInput = sqlContext.read.format("com.databricks.spark.avro").load(inputPath)
avroInput.write.format("com.databricks.spark.avro").save(outputPath)

但如果我尝试使用 sbt clean run 在我的项目中做同样的事情,我会得到:

java.lang.ClassNotFoundException: Failed to find data source: org.apache.spark.sql.avro.AvroFileFormat. Please find packages at http://spark.apache.org/third-party-projects.html
[info]   at org.apache.spark.sql.execution.datasources.DataSource$.lookupDataSource(DataSource.scala:657)
[info]   at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:194)
[info]   at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:178)
[info]   at com.databricks.spark.avro.package$AvroDataFrameReader$$anonfun$avro$2.apply(package.scala:34)

"com.databricks" %% "spark-avro" % "4.0.0" 列在我的依赖项中,它在我的外部库中。我还缺少另一个依赖项吗?

【问题讨论】:

    标签: scala apache-spark avro spark-avro


    【解决方案1】:

    查看https://spark.apache.org/docs/latest/sql-data-sources-avro.html#deploying,了解如何通过spark-submit 命令将 Avro jar 与您的应用程序 jar 一起部署。具体来说,您需要使用--packages 选项。这也适用于spark-shell

    【讨论】:

    • 我正在尝试将其包含在应用程序中,并使其与sbt clean testsbt clean run 一起使用。如果我在 spark-shell 中使用 packages 选项执行命令,它可以工作,但它不适用于 sbt clean testsbt clean run
    【解决方案2】:

    原来我不必使用 databricks jar。我将 apache spark avro 添加到我的依赖项中:

    "org.apache.spark"             %% "spark-avro"           % "2.4.0"
    

    我能够将我的 avro 文件读入DataFrame

    val avroInput = sparkSession.read
      .format("avro")
      .load("/pathtoFile/avroFile.avro")
    

    【讨论】:

      【解决方案3】:

      以下是在 Spark 中使用 Avro 时需要的依赖项。根据您的需要,使用以下之一。

      Maven 依赖项。

      <dependency>
          <groupId>org.apache.spark</groupId>
          <artifactId>spark-avro_2.11</artifactId>
          <version>2.4.0</version>
      </dependency>
      

      火花提交

      在使用spark-submit时,直接使用--packages提供spark-avro_2.12及其依赖,比如,

      ./bin/spark-submit --packages org.apache.spark:spark-avro_2.12:2.4.4
      

      火花壳

      在使用 spark-shell 时,您还可以使用 --packages 直接添加 spark-avro_2.12 及其依赖项,

      ./bin/spark-shell --packages org.apache.spark:spark-avro_2.12:2.4.4
      

      根据你使用的版本更改spark-avro版本。

      参考Using Avro Data Files From Spark SQL 2.4.x and later 学习愉快!!

      【讨论】:

        猜你喜欢
        • 2018-01-03
        • 1970-01-01
        • 1970-01-01
        • 2018-11-24
        • 2019-10-25
        • 1970-01-01
        • 1970-01-01
        • 2015-10-31
        • 1970-01-01
        相关资源
        最近更新 更多