如何让Spark从Dataset[String]加载CSV时不丢失最后一行?
问题:Spark从Dataset[String]加载CSV时计数异常,与文件加载行为不一致
我们有如下CSV内容:
RWA Country of exposure Credit risk asset class Projection period Scenario RWA
其中第一行RWA是表头,最后一行的RWA是数据内容,并非表头。
从Dataset[String]加载的异常表现
使用以下代码从Dataset[String]加载该CSV时:
import spark.implicits._ val source: Array[String] = ( "RWA\n" + "Country of exposure\n" + "Credit risk asset class\n" + "Projection period\n" + "Scenario\n" + "RWA" ).split("\n") val csvData: Dataset[String] = spark.sparkContext.parallelize(source).toDS() val df = spark.read .format("com.databricks.spark.csv") .option("header", value = true).csv(csvData) // df.count() == 4 不符合预期
预期df.count()结果为5,但实际得到4。
从文件加载的正常表现
若将相同CSV内容写入文件后加载,则结果符合预期:
val tempFile = Files.createTempFile("tmp", ".csv") val res = "RWA\n" + "Country of exposure\n" + "Credit risk asset class\n" + "Projection period\n" + "Scenario\n" + "RWA" Files.writeString(tempFile, res) val df = spark.read .format("com.databricks.spark.csv") .option("header", value = true) .csv(tempFile.toString) // df.count() == 5 符合预期
是否有办法让Spark从Dataset加载CSV时的表现与从文件加载一致?
环境信息:
- Scala版本:2.12.14
- Spark版本:3.0.3
内容的提问来源于stack exchange,提问作者stasdavydov
相关产品推荐
相关产品推荐

