Как игнорировать двойные кавычки в Spark Dataframe, где мы читаем входные данные из CSV? - PullRequest
0 голосов
/ 06 мая 2020

Я хотел бы создать фрейм данных Spark (без двойных кавычек), прочитав ввод из файла csv, как указано ниже.

enter image description here

Вот мой код, но пока бесполезен.

val empDF = spark.read.format("com.databricks.spark.csv")
  .option("header", "true")
  .option("inferSchema", "true")
  .option("quote", "\"")
  .option("escape", "\"")
  .load("EmpWithQuotes.csv")
  .toDF()

Я ожидаю, что на выходе не будут добавлены двойные кавычки, но я получаю результат с мусором.

+---+-----+----------+----+
|eno|ename|      eloc|esal|
+---+-----+----------+----+
| 11|�abx�| �chennai�|1000|
| 22|�abr�|     �hyd�|3000|

Ответы [ 3 ]

0 голосов
/ 06 мая 2020

Похоже, это не обычные двойные кавычки. Вы можете попытаться найти, какой символ и избежать его, или вы можете взять подстроку (если вы уверены, что каждая строка имеет начальные и конечные кавычки):

empDF.withColumn("ename", substring(col("ename"), 1, length(col("ename"))-2))
0 голосов
/ 06 мая 2020

Я пробовал это с Spark через Scala, и он удалил кавычки из столбцов:

df = df.withColumn("ename", regexp_replace(col("ename"), "“", ""))
    .withColumn("eloc", regexp_replace(col("eloc"), "“", ""))
    .withColumn("ename", regexp_replace(col("ename"), "”", ""))
    .withColumn("eloc", regexp_replace(col("eloc"), "”", ""))

В Python API Spark тоже должно быть что-то подобное ....

0 голосов
/ 06 мая 2020

Если вы можете использовать формат csv по умолчанию Spark, а не com.databricks.spark.csv, он должен работать должным образом

import org.apache.spark.sql.functions._

object EscapeQuotes {
  def main(args: Array[String]): Unit = {
    val spark = Constant.getSparkSess
    val pattern = "“|”"
    spark.read
      .option("header", "true")
      .option("inferSchema", "true")
      .option("quote", "\"")
      .option("escape", "\"")
      .csv("src/main/resources/sample.csv")
      .withColumn("eloc",regexp_replace(col("eloc"),pattern,""))
      .withColumn("ename",regexp_replace(col("ename"),pattern,""))
      .show()
  }

}


...