首页 > 解决方案 > Spark Scala:如何删除每行周围的双引号,包括标题?

问题描述

我是 Spark 的初学者,我需要解析的文件具有以下形状:

"VARIABLE;MOD;LIBMOD"
"CDEXE;6;PBS between 25000 and 50000 euros"

如何从中获取 Dataset[ValueDescriptor]?

一个 ValueDescriptor 是:

case class ValueDescriptor(variableName: String, value:String, label: String)

我只找到了如何删除列周围的引号,而不是每行周围的引号。

到目前为止,我一直在使用这样的代码:

    sparkSession
      .read
      .option("header", "true")
      .option("delimiter", ";")
      .csv("file.txt")
      .withColumnRenamed("VARIABLE", "variableName")
      .withColumnRenamed("MOD", "value")
      .withColumnRenamed("LIBMOD", "label")
      .as[ValueDescriptor]

标签: scalaapache-spark

解决方案


您可以先将其作为文本阅读以删除多余的引号

val txtDF = sparkSession
  .read
  .textFile("file.txt")
  .map(_.stripPrefix("\"").stripSuffix("\""))

然后将其加载为 CSV

sparkSession
  .read
  .option("header", "true")
  .option("delimiter", ";")
  .csv(txtDF)
  .withColumnRenamed("VARIABLE", "variableName")
  .withColumnRenamed("MOD", "value")
  .withColumnRenamed("LIBMOD", "label")
  .as[ValueDescriptor]

推荐阅读