【问题标题】:Scala: Replacing double quotes with single quotesScala:用单引号替换双引号
【发布时间】:2017-01-03 19:50:22
【问题描述】:

如何在 Scala 中用双引号替换单引号?我有一个数据文件,其中包含一些带有“abc”(双引号)的记录。我需要用单引号替换这些引号并将其转换为数据框。

val customSchema_1 =        
  StructType(Array(
  StructField("ID", StringType, true),
  StructField("KEY", StringType, true),
  StructField("CODE", StringType, true))

val df_1 = sqlContext.read
  .format("com.databricks.spark.csv")
  .option("delimiter", "¦")
  .schema(customSchema_1)
  .load("example")

【问题讨论】:

  • 哪一列有双引号?你的 spark 版本是什么?
  • 我使用的是 spark core 1.6.0。引号中的数据分散在列中,有些数据在列中有引号,而另一些则没有。
  • 这听起来像是一个可能更容易用 bash 脚本解决的问题,但您基本上需要编写一个正则表达式,它将在双引号内找到所有双引号(对于您的列字符串)并替换它们带单引号
  • 这里是一个使用 sed 的例子:unix.stackexchange.com/questions/236154/…

标签: scala dataframe spark-dataframe double-quotes single-quotes


【解决方案1】:

逐行阅读您的文件并将以下示例应用于每个文件:

val text: String = """Here is a lot of text and "quotes" so you may think that everything is ok until you see something "special" or "weird"
"""

text.replaceAll("\"", "'")

这将为您提供一个带有引号而不是双引号的新字符串值。

【讨论】:

  • 感谢您的建议!如果您使用的是数据框,如何实现这一点?数据框中是否有允许这样做的函数?
【解决方案2】:

你可以创建一个简单的udf来用单引号代替双引号

这是一个简单的例子

import org.apache.spark.sql.functions.udf

val removeDoubleQuotes = udf( (x:String) => s.replace("\"","'"))

//If df is the dataframe and use the udf to colName to replace " with '

df.withColumn("colName", removeDoubleQuotes($"colName"))

希望这会有所帮助!

【讨论】:

  • 如何在 PySpark 中做同样的事情,尤其是val removeDoubleQuotes = udf( (x:String) => s.replace("\"","'"))
猜你喜欢
  • 2021-08-12
  • 1970-01-01
  • 2018-05-12
  • 1970-01-01
  • 1970-01-01
  • 2018-11-18
  • 2018-09-23
  • 2011-01-26
  • 2013-04-15
相关资源
最近更新 更多