2016-06-10 8 views
0

mit behalte ichNoClassDefFoundError wenn avro in Funken Schale

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

bekommen, wenn show() auf einem Dataframe-Objekt aufrufen. Ich versuche das durch die Schale (Spark-Shell - Master Garn) zu tun. Ich kann sehen, dass die Shell das Schema beim Erstellen des DataFrame-Objekts erkennt, aber wenn ich Aktionen für die Daten ausführe, wird immer die NoClassDefFoundError ausgelöst, wenn versucht wird, die AvroWrapper zu instanziieren. Ich habe versucht, avro-mapred-1.8.0.jar in meinem $HDFS_USER/lib Verzeichnis auf dem Cluster hinzuzufügen und es sogar mit der Option --jar beim Starten der Shell enthalten. Keine dieser Optionen funktionierte. Jeder Rat würde sehr geschätzt werden. Im Folgenden finden Sie Beispielcode:

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 

Antwort

0

Wenn jemand anderes auf dieses Problem stößt, habe ich es endlich gelöst. Ich habe das CDH-Spark-Paket entfernt und es von http://spark.apache.org/downloads.html heruntergeladen. Danach hat alles gut funktioniert. Nicht sicher, was die Probleme mit der CDH-Version waren, aber ich werde nicht mehr Zeit verschwenden, um es herauszufinden.

1

Das Dataframe Objekt selbst an der val df =... Linie erstellt wird, aber die Daten gelesen werden noch nicht. Spark beginnt nur dann mit dem Lesen und Verarbeiten der Daten, wenn Sie nach einer Art von Ausgabe fragen (z. B. oder df.show()).

Das ursprüngliche Problem ist, dass das Avro-Mapred-Paket fehlt. Versuchen Sie Spark-Shell wie folgt starten:

spark-shell --packages org.apache.avro:avro-mapred:1.7.7,com.databricks:spark-avro_2.10:2.0.1 Die Spark Avro Paket die Avro Mapred Paket markiert als vorgesehen, aber es ist auf Ihrem System (oder Classpath) nicht verfügbar für einen oder anderen Grund.

+0

scheint es nur dort zu sitzen. wird nicht weiter kommen. 'org.apache.avro # avro-mapred als Abhängigkeit hinzugefügt ' ' com.databricks # spark-avro_2.10 hinzugefügt als Abhängigkeit' ':: Auflösung Abhängigkeiten :: org.apache.spark # spark-submit -parent; 1.0' \t 'confs: [default]' – Pudge

+0

Das ist komisch. Können Sie den gesamten Befehl einfügen, den Sie zum Starten von Spark-Shell verwenden? –

+0

Entschuldigung für die verzögerte Antwort Ich musste die Aufgaben für ein paar Tage wechseln. Hier ist der Befehl, den ich ausführe 'spark-shell --mastergarn --packages org.apache.avro: avro-mapped: 1.7.7, com.databricks: spark-avro_2.10: 2.0.1'. Auch nicht sicher, ob es einen Unterschied macht, aber wir führen CDH 5.6. Danke noch einmal. – Pudge