Scala: замена двойных кавычек одинарными

Как заменить одинарные кавычки двойными в 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")

person SFatima    schedule 03.01.2017    source источник
comment
в каком столбце двойные кавычки? какая у тебя версия спарка?   -  person mrsrinivas    schedule 03.01.2017
comment
Я использую искровое ядро ​​​​1.6.0. Данные в кавычках разбросаны по всему столбцу, некоторые данные содержат кавычки, а другие — нет.   -  person SFatima    schedule 03.01.2017
comment
Это звучит как проблема, которую может быть проще решить с помощью скрипта bash, но вам в основном нужно написать регулярное выражение, которое найдет все двойные кавычки в двойных кавычках (для строки столбца) и заменит их одинарными кавычками.   -  person evan.oman    schedule 03.01.2017
comment
Вот пример использования sed: unix.stackexchange.com/questions/236154/   -  person evan.oman    schedule 03.01.2017


Ответы (2)


Прочитайте построчно ваш файл и примените к каждому из них следующий пример:

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("\"", "'")

Это даст вам новое строковое значение с кавычками вместо двойных кавычек.

person Alex Fruzenshtein    schedule 03.01.2017
comment
Спасибо за предложение! Как вы можете реализовать это, если вы используете фрейм данных? Есть ли функция во фрейме данных, которая может это позволить? - person SFatima; 25.01.2017

Вы можете создать простой 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"))

Надеюсь это поможет!

person koiralo    schedule 08.07.2017
comment
Как сделать то же самое в PySpark, особенно val removeDoubleQuotes = udf( (x:String) => s.replace("\"","'")) - person Manas Jani; 03.04.2019