Spark Contexte fichier Texte: de charger plusieurs fichiers
J'ai besoin de traiter plusieurs fichiers dispersés sur différents annuaires. Je voudrais charger tous ces en un seul RDD et ensuite effectuer map/reduce sur elle. Je vois que SparkContext est capable de charger plusieurs fichiers à partir d'un seul répertoire à l'aide de caractères génériques. Je ne suis pas sûr de la façon de charger des fichiers à partir de plusieurs dossiers.
L'extrait de code suivant échoue:
for fileEntry in files:
fileName = basePath + "/" + fileEntry
lines = sc.textFile(fileName)
if retval == None:
retval = lines
else:
retval = sc.union(retval, lines)
Cela échoue sur la troisième boucle avec le message d'erreur suivant:
retval = sc.union(retval, lines)
TypeError: union() takes exactly 2 arguments (3 given)
Qui est bizarre étant donné que je suis en fournissant seulement 2 arguments. Tous les pointeurs apprécié.
- ..mais le premier argument est
self
. À partir de la docs, vous avez besoinsc.union([retval,lines])
- Laissez-moi essayer. Je suis surpris que ce serait travailler pour 2 boucles et d'échouer sur la troisième ...
- Qui a fait le tour. Merci Jonathan!
- Je viens de réaliser que vous pouvez utiliser
sc.textFile(','.join(files))
de la lire en un seul coup.
Vous devez vous connecter pour publier un commentaire.
Comment à ce sujet phrasé à la place?
En Scala
SparkContext.union()
a deux variantes, l'une qui prend vararg arguments, et celui qui prend une liste. Seule la seconde existe en Python (depuis le Python n'a pas de polymorphisme).Mise à JOUR
Vous pouvez utiliser un seul
textFile
appel à lire plusieurs fichiers."\n"
devrait être un"/"
.\n
et/
ne sont nulle part près de l'autre sur le clavier :).Je résoudre des problèmes en utilisant des caractères génériques.
par exemple, j'ai trouvé certains caractères dans les fichiers que je veux charger dans spark,
vous pouvez utiliser la phrase suivante
pour charger tous les fichiers relatifs.
Le caractère générique '*' ne fonctionne que dans un seul répertoire de niveau, qui n'est pas récursive.
Vous pouvez utiliser la fonction suivante de SparkContext:
wholeTextFiles(path: String, minPartitions: Int = defaultMinPartitions): RDD[(String, String)]
Lire un répertoire de fichiers texte à partir de HDFS, un système de fichiers local (disponible sur tous les nœuds), ou tout Hadoop de fichier pris en charge système d'URI. Chaque fichier est lu comme un seul enregistrement et retourné dans une paire clé-valeur, où la clé est le chemin d'accès de chaque fichier, la valeur est le contenu de chaque fichier.
https://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.SparkContext
Vous pouvez utiliser cette
D'abord, Vous pouvez obtenir un Tampon/Liste de S3 Chemins :
Maintenant Passer à cette Liste d'objet pour le morceau de code suivant, note : sc est un objet de SQLContext
Maintenant, vous avez une dernière Unifiée CA c'est à dire df
En option, Et Vous pouvez également repartitionner en un seul BigRDD
Repartitionnement fonctionne toujours 😀