Spark: Lecture de fichiers utilisant un délimiteur différent de la nouvelle ligne
Je suis à l'aide d'Apache Spark 1.0.1. J'ai beaucoup de fichiers délimités avec l'UTF8 \u0001
et pas avec la nouvelle ligne de \n
. Comment puis-je lire de tels fichiers dans Spark? Sens, le séparateur par défaut de sc.textfile("hdfs:///myproject/*")
est \n
et je veux le changer pour \u0001
.
source d'informationauteur dotan
Vous devez vous connecter pour publier un commentaire.
Spark shell, j'ai extrait les données en fonction de Réglage textinputformat.record.séparateur de spark:
sc.newAPIHadoopFile("mydata.txt", ...)
est unRDD[(LongWritable, Text)]
où la première partie des éléments est le caractère de départ de l'indice, et la deuxième partie est le texte délimité par"\u0001"
.Vous pouvez utiliser
textinputformat.record.delimiter
pour définir le séparateur pourTextInputFormat
E. g.,Par exemple, mon entrée est un fichier contenant une ligne
aXbXcXd
. Le code ci-dessus va afficherEn python, cela pourrait être réalisé à l'aide de:
Ici est un prêt-à-utiliser la version de Tchad's et @zsxwingdes reponses pour Scala utilisateurs, qui peut être utilisé de cette façon:
L'extrait de code suivant crée un supplément de
textFile
méthode implicitement attachées à laSparkContext
à l'aide d'unimplicit class
(afin de répliquerSparkContext
par défaut detextFile
méthode):qui peut être utilisé de cette façon:
Remarque le paramètre supplémentaire
mapreduce.input.linerecordreader.line.maxlength
qui limite la taille maximale d'un enregistrement. Ceci est très pratique lors de la lecture d'un fichier corrompu pour laquelle un dossier pourrait être trop long pour tenir dans la mémoire (plus de chances que cela se produise lors de la lecture avec le séparateur d'enregistrement).Avec ce paramètre, lors de la lecture d'un fichier corrompu, une exception (
java.io.IOException
- ainsi catchable) sera lancé plutôt que d'obtenir un désordre de la mémoire qui sera le SparkContext.