1

Ich versuche, einen schnellen Bericht mit zeppelin Notebook zu bauen holen data from DynamoDB with Apache SparkFehler beim Lesen DynamoDB Rekord Spark

Die Zahl fein darüber hinaus läuft, aber ich bin nicht in der Lage etwas wie

orders.take(1).foreach(println) 

laufen schlägt mit dem folgenden Fehler fehl:

org.apache.spark.SparkException: Job aborted due to stage failure: Task 0.0 in stage 5.0 (TID 5) had a not serializable result: org.apache.hadoop.io.Text 
Serialization stack: 
- object not serializable (class: org.apache.hadoop.io.Text, value:) 
- field (class: scala.Tuple2, name: _1, type: class java.lang.Object) 
- object (class scala.Tuple2, (,{<<A rec from DynamoDB as JSON>>})) 
- element of array (index: 0) 
- array (class [Lscala.Tuple2;, size 7) 

Wie behebt man das? Ich habe versucht, die Ergebnisse typisieren, aber das schlug fehl:

asInstanceOf[Tuple2[Text, DynamoDBItemWritable] 

so den Filter

tat
orders.filter(_._1 != null) 

Ich plane dies zu einem Datenrahmen zu konvertieren dies als eine temporäre Tabelle zu registrieren. Dann plane ich Adhoc-Abfragen zu diesem Thema.

Antwort

1

Ich bin kein kompletter Spark-Experte, aber ich weiß, dass alles, was parallelisiert werden könnte, serialisierbar sein muss. Ich denke, es könnte ein Hinweis in der Fehlermeldung sein:

object not serializable (class: org.apache.hadoop.io.Text, value:) 

Eine schnelle Überprüfung auf der Definition dieser Klasse sagt mir, dass es nicht sein kann:

public class Text 
    extends BinaryComparable 
    implements WritableComparable<BinaryComparable> 

Dies kann helfen:

http://apache-spark-user-list.1001560.n3.nabble.com/How-to-solve-java-io-NotSerializableException-org-apache-hadoop-io-Text-td2650.html

+0

Hallo @haggy, danke für Ihre Antwort. Hier liest der Code die dynamoDB-Tabelle direkt als hadoopRDD. Ich habe nicht die Möglichkeit, es zu lesen und dann als serialisierbares Objekt zu implementieren. Ich verwende die von aws bereitgestellten Jars, um mit DynamoDB zu interagieren. –