2017-07-31 4 views
2

Je dispose d'un fichier JSON valide:spark charger un fichier s3a en tant que df, quelle commande exécuter?

je peux réussir l'importer sur une machine d'allumage locale

DF = sqlContext.read.json("/home/me/myfile.json") 

J'ai un script shell pour soumettre le travail

/home/me/spark/bin/spark-submit \ 
--master local[*] Code.py 

Jusqu'à présent si bon, par exemple DF.show (1) fonctionne bien.

Maintenant, j'essaie de charger à partir d'un lien s3a (qui contient exactement les mêmes données que myfile.json).

J'ai essayé

DF = sqlContext.read.json("s3a://some-bucket/myfile.json") 

Je lance encore mon script shell qui contient la même commande, à savoir

/home/me/spark/bin/spark-submit \ 
--master local[*] Code.py 

Mais cette fois ça ne marche pas, je reçois l'erreur suivante

java.lang.ClassNotFoundException: Class org.apache.hadoop.fs.s3a.S3AFileSystem not found 

Mon script shell est-il incorrect? PS: Je viens de recevoir le lien s3a de quelqu'un d'autre. Donc, ce n'est pas sur mon compte AWS. Je suppose que je peux toujours importer les données de ce lien même si je ne connais pas de clé d'accès ou de clé secrète ...

+0

Il s'agit d'une classe ClassNotFoundException''. Avez-vous vérifié vos dépendances? –

+0

non, comment je fais ça? – S12000

+0

J'ai corrigé les dépendances en ajoutant à la fois haddop-aws-2.7.3.jar et aws-java-sdk-1.7.4.jar dans le fichier/spar/jars. Néanmoins, j'ai maintenant l'erreur suivante: Impossible de charger les informations d'identification AWS à partir de n'importe quel fournisseur de la chaîne – S12000

Répondre

0

Enfin, je pourrais résoudre le problème. En ajoutant le bon fichier .jar (voir mon commentaire ci-dessous) et en définissant AWS_ACCESS_KEY_ID = AWS_SECRET_ACCESS_KEY dans le fichier spark-env.sh qui se trouve dans le dossier conf de mon dossier spark.

Merci