1

私は得続けます

java.lang.NoClassDefFoundError: org/apache/avro/mapred/AvroWrapper

show()DataFrame オブジェクトを呼び出すとき。シェル (spark-shell --master yarn) を介してこれを実行しようとしています。DataFrame オブジェクトの作成時にシェルがスキーマを認識していることがわかりますが、データに対してアクションを実行するNoClassDefFoundErrorと、インスタンス化しようとすると常に がスローされますAvroWrapperavro-mapred-1.8.0.jarクラスターのディレクトリに追加しようとしまし$HDFS_USER/libたが、シェルの起動時に --jar オプションを使用して含めました。これらのオプションはどちらも機能しませんでした。アドバイスをいただければ幸いです。以下はコード例です。

scala> import org.apache.spark.sql._
scala> import com.databricks.spark.avro._
scala> val sqc = new SQLContext(sc)
scala> val df = sqc.read.avro("my_avro_file") // recognizes the schema and creates the DataFrame object
scala> df.show // this is where I get NoClassDefFoundError
4

2 に答える 2

2

この行で DataFrame オブジェクト自体は作成されますval df =...が、データはまだ読み込まれていません。Spark は、何らかの出力 ( df.count()、または などdf.show()) を要求したときにのみ、データの読み取りと処理を開始します。

したがって、元の問題は avro-mapred パッケージが見つからないことです。次のように Spark Shell を起動してみてください。

spark-shell --packages org.apache.avro:avro-mapred:1.7.7,com.databricks:spark-avro_2.10:2.0.1 Spark Avro パッケージは Avro Mapred パッケージを提供済みとしてマークしますが、何らかの理由でシステム (またはクラスパス) で利用できません。

于 2016-06-10T20:34:32.220 に答える