首页 > 解决方案 > 在 spark 数据框中为包含 , 的列名加上引号

问题描述

我有一个数据框,其中一些列名包含,. 从下面看,第二列名称包含,.

现在我想将那些包含,.""

以下是我的代码:

def testWriteDataframeToCSV (): Unit = {
    val df = generateDF(Array(
      ("1", "4567-01", "one", 1, 1.0, "1", "1.1"),
      ("2", "4568-02", "two", 2, 2.0, "2", "2.2"),
      ("3", "4569-25", "three", 3, 3.0, "3", "3")
    ), Seq("Id", "Course,No", "data1", "data2", "data3", "data4", "data5"))

    val take: Option[Int] = None
    val sample: Option[Float] = None

    val header = df.schema.fieldNames.mkString(",") + "\n"       
  }

当前标题:

header = "Id,Course,No,data1,data2,data3,data4,data5\n"

预期的标题:

header = "Id,"Course,No",data1,data2,data3,data4,data5\n"

标签: regexscalaapache-sparkdataframe

解决方案


您只需要找到,名称中有 a 的元素并相应地添加引号。我使用了 Scala 的三引号s""" """,因此无需在每一侧转义一个引号:

df.schema.fieldNames.map{ f => if (f.contains(",")) s""""${f}"""" else f }.mkString(",")
//String = Id,"Course,No",data1,data2,data3,data4,data5

推荐阅读