spark-csv ( https://github.com/databricks/spark-csv )を使用して csv ファイルを spark に読み込む方法は知っていますが、既に csv ファイルを文字列として表しており、この文字列を直接変換したいと考えています。データフレーム。これは可能ですか?
3 に答える
たとえばscala-csvを使用して、文字列を解析して csv にすることができます。
val myCSVdata : Array[List[String]] =
myCSVString.split('\n').flatMap(CSVParser.parseLine(_))
ここでは、もう少し処理、データのクリーニング、すべての行が適切に解析され、フィールドの数が同じであることの確認などを行うことができます...
次に、これをRDD
of recordsにすることができます。
val myCSVRDD : RDD[List[String]] = sparkContext.parallelize(msCSVdata)
ここで、csv データのフィールドをより適切に反映するために、文字列のリストをケース クラスにまとめることができます。Person
この例の sの作成からインスピレーションを得る必要があります。
この手順は省略します。
その後、DataFrame に変換できます。
import spark.implicits._
myCSVDataframe = myCSVRDD.toDF()
受け入れられた答えはspark 2.2.0ではうまくいきませんでしたが、必要なものに私を導きましたcsvData.lines.toList
val fileUrl = getClass.getResource(s"/file_in_resources.csv")
val stream = fileUrl.getContent.asInstanceOf[InputStream]
val streamString = Source.fromInputStream(stream).mkString
val csvList = streamString.lines.toList
spark.read
.option("header", "true")
.option("inferSchema", "true")
.csv(csvList.toDS())
.as[SomeCaseClass]