scala - Spark 读取 Avro 文件
问题描述
我正在使用 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"
列在我的依赖项中,它在我的外部库中。我还缺少另一个依赖项吗?
解决方案
以下是在 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 版本。
请参阅使用 Spark SQL 2.4.x 和更高版本中的 Avro 数据文件 快乐学习!
推荐阅读
- vue.js - Vuex,具有全局错误和通知处理的最佳实践
- powershell - PowerShell:字符串到日期时间,但采用欧洲格式
- powerbi - 如何使用 puppeteer 挂钩到 powerbi 报告加载事件
- ios - 创建反应原生模块并在应用程序中使用它
- r - 如何使用向量中的两个条件在 r 中运行 for 循环
- android - 使用融合位置提供程序获取用户当前位置
- javascript - 如何生成特定真实世界大小的图像
- angular - 带有 ResizeObserver 的 ViewContainerRef 在角度中无法正常工作
- angular - 当另一个发射时运行一个可观察的,返回两个结果
- django - Django 模型 - 使用两个外键值