0

Je travaille avec un fichier csv comme ci-dessousConversion Dataset [Array [chaîne]] pour Dataset [MyCaseClass]

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

En raison des citations supplémentaires, spark.read.csv ne donne pas les colonnes propres. J'ai donc pensé à utiliser spark.read.textFile qui donne Dataset [String]. J'utilise le code ci-dessous pour supprimer les citations et les séparer.

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 

Est-il possible de réaliser ce genre de Dataset ou convertion une meilleure façon de diviser en plusieurs colonnes sur? Pour l'instant j'utilise RDD pour faire le travail, mais j'aimerais savoir comment le faire.

Répondre

1

Vous pouvez construire un enregistrement de MyCaseClass de chaque ligne de séparation de sorte que vous avez RDD[MyCaseClass], vous pouvez directement convertir en trame de données:

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

Bien sûr qui peut être fait! Je vous remercie!! – Shasankar