web-dev-qa-db-ja.com

spark-avroパッケージを使用してspark-shellからavroファイルを読み取る方法は?

Apache Avroデータソースガイド で説明されているspark-avroパッケージを使用しようとしています。

次のコマンドを送信すると、

val df = spark.read.format("avro").load("~/foo.avro")

エラーが発生します:

Java.util.ServiceConfigurationError: org.Apache.spark.sql.sources.DataSourceRegister: Provider org.Apache.spark.sql.avro.AvroFileFormat could not be instantiated
  at Java.util.ServiceLoader.fail(ServiceLoader.Java:232)
  at Java.util.ServiceLoader.access$100(ServiceLoader.Java:185)
  at Java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.Java:384)
  at Java.util.ServiceLoader$LazyIterator.next(ServiceLoader.Java:404)
  at Java.util.ServiceLoader$1.next(ServiceLoader.Java:480)
  at scala.collection.convert.Wrappers$JIteratorWrapper.next(Wrappers.scala:43)
  at scala.collection.Iterator$class.foreach(Iterator.scala:891)
  at scala.collection.AbstractIterator.foreach(Iterator.scala:1334)
  at scala.collection.IterableLike$class.foreach(IterableLike.scala:72)
  at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
  at scala.collection.TraversableLike$class.filterImpl(TraversableLike.scala:247)
  at scala.collection.TraversableLike$class.filter(TraversableLike.scala:259)
  at scala.collection.AbstractTraversable.filter(Traversable.scala:104)
  at org.Apache.spark.sql.execution.datasources.DataSource$.lookupDataSource(DataSource.scala:630)
  at org.Apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:194)
  at org.Apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:178)
  ... 49 elided
Caused by: Java.lang.NoSuchMethodError: org.Apache.spark.sql.execution.datasources.FileFormat.$init$(Lorg/Apache/spark/sql/execution/datasources/FileFormat;)V
  at org.Apache.spark.sql.avro.AvroFileFormat.<init>(AvroFileFormat.scala:44)
  at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
  at Sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.Java:62)
  at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.Java:45)
  at Java.lang.reflect.Constructor.newInstance(Constructor.Java:423)
  at Java.lang.Class.newInstance(Class.Java:442)
  at Java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.Java:380)
  ... 62 more

org.Apache.spark:spark-avro_2.12:2.4.0パッケージの異なるバージョン(2.4.0、2.4.1、および2.4.2)を試しましたが、現在Spark 2.4.1を使用していますが、どちらも機能しませんでした。

次のコマンドでspark-Shellを開始します。

spark-Shell --packages org.Apache.spark:spark-avro_2.12:2.4.0

enter image description here

9
sahibeast

tl; drSpark 2.4.x +以降は、Apache Avroデータの読み取りと書き込みの組み込みサポートを提供します =、ただし spark-avroモジュールは外部にあり、デフォルトではspark-submitまたはspark-Shellに含まれていません 、同じScalaバージョン(ex 。2.12)_spark-Shell_および_--packages_の場合。


例外の理由は、Spark 2.11.12に対して構築されたScalaからの_spark-Shell_を使用しているのに対し、_--packages_はScala 2.12(_org.Apache.spark:spark-avro_2.12:2.4.0_内)。

_--packages org.Apache.spark:spark-avro_2.11:2.4.0_を使用すれば大丈夫です。

10
Jacek Laskowski

pyspark 2.7とspark 2.4.3

以下のパッケージ作品

bin/pyspark --packages org.Apache.spark:spark-avro_2.11:2.4.3
2
Suresh Chaganti

同じ問題が発生したときにもう1つ気付いたことは、初めて問題なく動作し、その後エラーが表示されることです。 rmコマンドをdockerファイルに追加して、キャッシュをクリアします。私の場合はそれで十分でした。

0
Sowmya