Lassen Sie config.json
eine kleine json-Datei sein:
Ich habe einen einfachen Code geschrieben, der die JSON-Datei mit sc.textFile
liest (weil die Datei S3, local oder HDFS sein kann, also ist textFile praktisch)
Die SBT-Datei zieht nur spark-core
library
Das Programm funktioniert wie erwartet und schreibt den Inhalt von config.json in die Standardausgabe.
Jetzt möchte ich auch mit aws-java-sdk, amazon sdk für den Zugriff auf S3 verbinden.
%Vor%Beim Ausführen desselben Codes löst Spark die folgende Ausnahme aus.
%Vor% Wenn man den Stack liest, scheint es, dass, wenn aws-java-sdk verlinkt ist, sc.textFile
erkennt, dass es sich bei der Datei um eine json-Datei handelt und versucht, sie mit einem bestimmten Format zu analysieren, das sie natürlich nicht finden kann. Ich muss mit aws-java-sdk verlinken, also sind meine Fragen:
1- Warum das Hinzufügen von aws-java-sdk
ändert das Verhalten von spark-core
?
2- Gibt es einen Workaround (die Datei kann HDFS, S3 oder lokal sein)?
Mit Amazon-Support gesprochen. Es ist ein Abhängigkeitsproblem mit der Jackson-Bibliothek. In SBT überschreiben Sie jackson:
%Vor%ihre Antwort: Wir haben dies auf einer Mac, Ec2 (redhat AMI) Instanz und auf EMR (Amazon Linux) gemacht. 3 verschiedene Umgebungen. Die Hauptursache des Problems ist, dass sbt ein Abhängigkeitsdiagramm erstellt und dann das Problem der Versionskonflikte behandelt, indem es die ältere Version entfernt und die neueste Version der abhängigen Bibliothek auswählt. In diesem Fall hängt der Funke von der 2.4-Version der jackson-Bibliothek ab, während das AWS-SDK 2.5 benötigt. Es gibt also einen Versionskonflikt und die Abhängigkeitsversion von Sparks (die älter ist) und die AWS-SDK-Version (die neueste Version).
Hinzufügen zu Boris 'Antwort , wenn Sie keine fixe Version von Jackson verwenden möchten (vielleicht in der In Zukunft werden Sie Spark upgraden, wollen aber trotzdem den von AWS verwerfen. Sie können folgendes tun:
%Vor%Tags und Links jackson apache-spark aws-java-sdk