0

ich mit einer CSV-Datei wie untenKonvertieren Datensatz [Array [Zeichenfolge]] zu Datensatz [MyCaseClass]

"age;""job"";""marital""" 
"58;""management"";""married""" 
"44;""technician"";""single""" 

arbeite Wegen der zusätzlichen Anführungszeichen, nicht spark.read.csv nicht sauber Spalten geben. Also dachte ich über die Verwendung von spark.read.textFile, die Dataset [String] gibt. Ich verwende den folgenden Code, um die Anführungszeichen zu entfernen und sie zu trennen.

case class MyCaseClass(age: String, job: String, marital: String) 
val inputDS = spark.read.textFile(inpPath) 
val cleanDS = inputDS.map(_.replaceAll(""""""", "").split(";")) 
val seperatedDS = cleanDS.as[MyCaseClass] //fails 

Gibt es eine Möglichkeit, diese Art von Dataset convertion oder eine bessere Art und Weise zu erreichen, in mehrere Spalten aufteilen aus? Momentan benutze ich RDD, um die Arbeit zu erledigen, aber ich würde gerne Dataset/Dataframe kennen lernen.

Antwort

1

Sie können eine Aufzeichnung der MyCaseClass von jeder Teilungslinie konstruieren, so dass Sie RDD[MyCaseClass] haben, dann können Sie es direkt an Datenrahmen konvertieren:

val cleanDS = inputDS.map(line => { 
    val fields = line.replaceAll("\"", "").split(";") 
    MyCaseClass(fields(0), fields(1), fields(2)) 
}) 

cleanDS 
// res37: org.apache.spark.sql.Dataset[MyCaseClass] = [age: string, job: string ... 1 more field] 

cleanDS.toDF.show 
+---+----------+-------+ 
|age|  job|marital| 

+---+----------+-------+ 
|age|  job|marital| 
| 58|management|married| 
| 44|technician| single| 
+---+----------+-------+ 
+1

Sicher, die getan werden kann! Vielen Dank!! – Shasankar

Verwandte Themen