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" указан в моих зависимостях и в моих внешних библиотеках. Есть ли еще одна зависимость, которую мне не хватает?


person covfefe    schedule 10.12.2018    source источник


Ответы (3)


Ниже приведены зависимости, которые вам понадобятся при использовании Avro в Spark. в зависимости от ваших потребностей, используйте один из следующих.

Зависимости Maven.

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

spark-submit

При использовании spark-submit предоставьте spark-avro_2.12 и его зависимости напрямую, используя --packages, например,

./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 в соответствии с используемой версией.

См. Использование файлов данных Avro из Spark SQL 2.4.x и более поздних версий Счастливого обучения!

person Kumar    schedule 11.10.2019

Оказывается, мне не нужно было использовать банку databricks. Я добавил apache spark avro в свои зависимости:

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

И я смог прочитать свой файл avro в DataFrame:

val avroInput = sparkSession.read
  .format("avro")
  .load("/pathtoFile/avroFile.avro")
person covfefe    schedule 21.12.2018

Взгляните на https://spark.apache.org/docs/latest/sql-data-sources-avro.html#deploying, чтобы узнать, как развернуть jar-файл Avro вместе с jar-файлом вашего приложения с помощью команды spark-submit. В частности, вам нужно использовать опцию --packages. Это также работает для spark-shell.

person ShirishT    schedule 11.12.2018
comment
Я пытаюсь включить приложение и заставить его работать с sbt clean test или sbt clean run. Это работает, если я выполняю команды в spark-shell с опцией пакетов, но не работает с sbt clean test или sbt clean run. - person covfefe; 11.12.2018