Spark beim Lesen der JSON-Datei beim Verbinden mit aws-java-sdk

8

Lassen Sie config.json eine kleine json-Datei sein:

%Vor%

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)

%Vor%

Die SBT-Datei zieht nur spark-core library

%Vor%

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)?

    
Boris 01.11.2015, 18:32
quelle

2 Antworten

10

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).

    
Boris 03.12.2015, 13:02
quelle
1

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%     
nedim 22.06.2016 09:36
quelle