Localement lecture S3 fichiers par Étincelle (ou mieux: pyspark)

Je veux lire un fichier S3 de mon (local) de la machine, par l'intermédiaire de l'Étincelle (pyspark, vraiment). Maintenant, je continue à recevoir des erreurs d'authentification comme

java.lang.IllegalArgumentException: AWS ID de Clé d'Accès et de Secret
La Clé d'accès doit être spécifié en tant que nom d'utilisateur ou mot de passe
(respectivement) d'un s3n URL, ou par la définition de la fs.s3n.awsAccessKeyId
ou fs.s3n.awsSecretAccessKey propriétés (respectivement).

J'ai regardé partout ici et sur le web, essayé beaucoup de choses, mais apparemment S3 a été l'évolution au cours de la dernière année ou mois, et toutes les méthodes ont échoué, mais l'une:

pyspark.SparkContext().textFile("s3n://user:password@bucket/key")

(note de l' s3n [s3 n'a pas de travail]). Maintenant, je ne veux pas utiliser une URL avec l'utilisateur et le mot de passe parce qu'ils peuvent apparaître dans les journaux, et je suis également pas sûr de la façon de les obtenir à partir de la ~/.aws/credentials fichier de toute façon.

Alors, comment puis-je lire en local à partir de S3 par Étincelle (ou, mieux, pyspark) en utilisant les informations d'identification AWS à partir de l' standard ~/.aws/credentials fichier (dans l'idéal, sans copier les informations d'identification, il y à encore un autre fichier de configuration)?

PS: j'ai essayé os.environ["AWS_ACCESS_KEY_ID"] = … et os.environ["AWS_SECRET_ACCESS_KEY"] = …, il n'a pas de travail.

PPS: je ne suis pas sûr où "jeu de la fs.s3n.awsAccessKeyId ou fs.s3n.awsSecretAccessKey propriétés" (Google n'est pas venu avec quelque chose). Cependant, j'ai essayé de nombreuses façons de définir ces: SparkContext.setSystemProperty(), sc.setLocalProperty(), et conf = SparkConf(); conf.set(…); conf.set(…); sc = SparkContext(conf=conf). Rien n'a fonctionné.

  • Voir aussi cette réponse.
  • Il a travaillé pour moi de définir les variables d'environnement à la ligne de commande avant de l'exécuter étincelle soumettre avec pyspark localement. En les définissant à l'intérieur de pyspark à l'aide de os.environ n'ai pas de travail parce qu'il est trop tard pour obtenir ramassé.
  • Ouais, les choses devraient fonctionner de cette façon (ou par le bon fichier de configuration). Cette question ne se pose qu'en raison d'un bug sur boto.