Lorsque je charge un fichier texte dans une RDD, il est par défaut par défaut par chaque ligne. Par exemple, envisagez le texte suivant:
>>> RDD.count() 3 >>> RDD.collect() ['Lorem Ipsum is simply dummy text of the printing and typesetting industry.', 'Lorem Ipsum has been the industry's standard dummy text ever since the 1500s.', 'When an unknown printer took a galley of type and scrambled it to make a type specimen book and publish it.']
3 Réponses :
J'ai eu ma réponse dans l'une des réponses ici écrit par chanteur . La réponse se passe comme suit:
rdd = sc.newAPIHadoopFile(YOUR_FILE, "org.apache.hadoop.mapreduce.lib.input.TextInputFormat", "org.apache.hadoop.io.LongWritable", "org.apache.hadoop.io.Text", conf={"textinputformat.record.delimiter": YOUR_DELIMITER}).map(lambda l:l[1])
Méthode TextFile de RDD utilise en interne Hadoop's TextIntPormat pour lire les fichiers texte. La touche par défaut, la paire de valeurs se traduit par le décalage d'enregistrement et l'enregistrement complet avec le délimiteur par défaut comme "\ n" Le moyen facile de passer à travers cela est de lire dans le fichier en tant que méthode CSV de Dataframe spécifiant le délimiteur comme "". Comme ci-dessous:
val conf = new org.apache.hadoop.conf.Configuration conf.set("textinputformat.record.delimiter", "\u002E") sc.textFile.newAPIHadoopFile(file-path, classOf[org.apache.hadoop.mapreduce.lib.input.TextInputFormat], classOf[org.apache.hadoop.io.LongWritable], classOf[org.apache.hadoop.io.Text], conf).count()
in Scala Nous pouvons faire collect () code> strong> +
.mkstring code> strong> pour créer une chaîne puis diviser sur
. code>
Exemple: code> strong> p>
Une belle tour. Mais quelle est la réalisabilité de cela pour un fichier énorme. Collecter () est un gros fardeau.
Essayez avec option ("multiligne", "vrai")
@dassum, cela fonctionne pour les données de données. Vous ne pouvez pas vraiment spécifier des options à la méthode de la TextFile de RDD