1

J'utilise Python 2 (ordinateur portable Jupyter exécutant PySpark sur EMR). J'essaye de charger des données en tant que données afin de les mapper/réduire et les exporter vers mon propre compartiment S3.S3 Bucket .txt.gz Copie via PySpark

J'utilise généralement cette commande:

df = sqlContext.read.format('com.databricks.spark.csv').options(header='true', inferschema='true').load('file:///home/path/datafolder/data2014/*.csv') 

Ce ne parvient pas à travailler lorsque le fichier est dans S3 et non mon propre seau (comme je ne suis pas sûr de savoir comment formater la commande .load) qui est le plus de mes cas d'utilisation maintenant. Mes fichiers sont aussi un mélange de .csv et .txt.gz, que je veux tous les deux au format csv (dézippés) lors de la copie.

J'ai eu un coup d'oeil sur Google et essayé les commandes suivantes en Python 2 (bloc-notes Jupyter):

import os 
import findspark 
findspark.init('/usr/lib/spark/') 

from pyspark import SparkContext, SQLContext 
sc = SparkContext.getOrCreate() 
sqlContext = SQLContext(sc) 

import sys 

if sys.version_info[0] >= 3: 
    from urllib.request import urlretrieve 
else: 
    from urllib import urlretrieve 

# Get file from URL like this: 
urlretrieve("https://s3.amazonaws.com/bucketname/path/path2/path3/path4/path3/results.txt.gz") 

qui produit simplement: ('/tmp/tmpmDB1EC.gz', <httplib.HTTPMessage instance at 0x7f54db894758>) donc je ne suis pas sûr de ce qu'il faut faire maintenant.

J'ai lu la documentation et j'ai recherché sur ce site et Google des méthodes simples pour former la df mais je suis coincé. J'ai également lu à propos de l'utilisation de ma clé/clé secrète AWS (que j'ai) mais je n'ai pas trouvé d'exemple à suivre.

Quelqu'un peut-il m'aider?

Répondre

0

vous devez le charger en utilisant le contexte d'allumage

data_file = urlretrieve("https://s3.amazonaws.com/bucketname/path/path2/path3/path4/path3/results.txt.gz") 

raw_data = sc.textFile(data_file) 
+0

Merci pour la réponse rapide. J'ai essayé ceci mais j'ai eu cette erreur: Py4JError: Une erreur s'est produite en appelant o29.textFile. En outre, je ne suis pas sûr si cela est évolutif, c'est-à-dire que je peux lire dans plusieurs chemins comme celui-ci: https://stackoverflow.com/questions/46240271/reading-multiple-s3-folders-paths-into-pyspark? – lseactuary

+0

sc.textFile ("s3.amazonaws.com/bucketname/path/path2/path3/path4/path3/results.txt.gz") peut-être? – convolutionBoy

+0

Je reçois alors cette erreur: NameError: le nom 'urlretrieve' n'est pas défini. urllib n'est pas disponible sur Python 2. Le problème est que je dois pouvoir copier plusieurs chemins S3 (idéalement convertir en un fichier CSV décompressé) et fusionner dans une même dataframe afin de faire une carte/réduire et sortir dans mon compartiment S3 . Je n'arrive pas à trouver une solution pour cela. – lseactuary