[FIXED] Wie kann ich den Dateinamen in den Tupeln in Scala speichern

Ausgabe

Ich habe einen Ordner, der viele Textdateien enthält, ich muss diese Dateien in einem RDD lesen und den Dateinamen mit Wörtern darauf speichern

Beispiel :

doc1.txt :
" hello my name sam "

doc2.txt :

"hello world"

Ich muss den Ordnerpfad übergeben und die Ergebnisse sind:

(Hallo, doc1), (mein, doc1), (Welt, doc2), ….. usw

Ich habe das versucht:

 val rddWhole = spark.sparkContext.wholeTextFiles("C:/tmp/files/*")
  rddWhole.foreach(f=>{
    println(f._1+"=>"+f._2)
  })

aber es handelt sich um den gesamten Text in der Datei als eine Zeichenfolge. Hat jemand eine Idee, wie ich das lösen kann?

Lösung

Basierend auf meinen Annahmen möchten Sie jedes Wort in einer Datei extrahieren und es mit dem Dateinamen verknüpfen, in dem das Wort enthalten ist. Wie Sie bereits erwähnt haben, gibt Ihnen Spark den gesamten Inhalt einer Datei als einzelne Zeichenfolge zurück. Wie, wenn dies der Dateiinhalt ist:

hello
my name    is
John Doe

Der Wert, den Sie erhalten, wäre:

val fileString = "hello\nmy name    is\nJohn Doe"

Recht? Sie müssen also den Zeichenfolgenwert durch eine beliebige Anzahl von Leerzeichen oder Zeilenumbruchzeichen aufteilen, wie folgt:

val wordsSeparated = fileString.split("\\s+|\\n+") // \\s means space, \\n means new line (in regexes, character escaping and stuff)

Am Ende brauchen Sie also so etwas:

rddWhole.foreach { f => 
  f._2.split("\\s+|\\n+").foreach(word => println(f._1 + " => " + word))
}

Das wäre das Ergebnis:

file:/tmp/spark-test/two.txt => and
file:/tmp/spark-test/two.txt => this
file:/tmp/spark-test/two.txt => would
file:/tmp/spark-test/one.txt => so
file:/tmp/spark-test/one.txt => hello
file:/tmp/spark-test/one.txt => my
file:/tmp/spark-test/one.txt => name
file:/tmp/spark-test/one.txt => is
file:/tmp/spark-test/one.txt => John
file:/tmp/spark-test/one.txt => Doe
file:/tmp/spark-test/two.txt => be
file:/tmp/spark-test/two.txt => the
file:/tmp/spark-test/two.txt => second
file:/tmp/spark-test/two.txt => text
file:/tmp/spark-test/two.txt => file


Beantwortet von –
AminMal


Antwort geprüft von –
Mary Flores (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like

[FIXED] Long zu HexString

Ausgabe Ich habe das folgende Scala-Snippet: someLong.formatted("%016x") Als Ergebnis erhalte ich den Hex-String. Ich musste jedoch die Scala-Version…