8

spark-csv ( https://github.com/databricks/spark-csv )を使用して csv ファイルを spark に読み込む方法は知っていますが、既に csv ファイルを文字列として表しており、この文字列を直接変換したいと考えています。データフレーム。これは可能ですか?

4

3 に答える 3

4

たとえばscala-csvを使用して、文字列を解析して csv にすることができます。

val myCSVdata : Array[List[String]] = myCSVString.split('\n').flatMap(CSVParser.parseLine(_))

ここでは、もう少し処理、データのクリーニング、すべての行が適切に解析され、フィールドの数が同じであることの確認などを行うことができます...

次に、これをRDDof recordsにすることができます。

val myCSVRDD : RDD[List[String]] = sparkContext.parallelize(msCSVdata)

ここで、csv データのフィールドをより適切に反映するために、文字列のリストをケース クラスにまとめることができます。Personこの例の sの作成からインスピレーションを得る必要があります。

https://spark.apache.org/docs/latest/sql-programming-guide.html#inferring-the-schema-using-reflection

この手順は省略します。

その後、DataFrame に変換できます。

import spark.implicits._ myCSVDataframe = myCSVRDD.toDF()

于 2016-08-24T10:00:04.710 に答える
2

受け入れられた答えは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]  
于 2017-12-13T16:52:36.000 に答える