колонка с чистым пространством, очищаемым искрой - PullRequest
0 голосов
/ 08 октября 2018

У меня есть запрос, подобный следующему

val query = "select 'a' as col_1, ' ' as col_2, col_3,col_4 from mytable"
val df = sqlContext.sql(query)

Теперь, если я отображаю фрейм данных, он выглядит следующим образом:

col_1|col_2|col_3|col_4
a| |test|test
a| |testa|testa
a| |testb|testb

Это, как и ожидалось.Однако, если я записываю этот кадр данных на диск

df.write
.option("sep",",")
.csv(file)

Файл содержит следующее:

a,\"\",test,test
a,\"\",testa,testb
a,\"\",testb,testb

Второй столбец неверен, он должен быть просто одним пробелом, без кавычек иличто угодно.

Как мне этого избежать?Я хочу, чтобы мой файл выводился как:

a, ,test,test
a, ,testa,testb
a, ,testb,testb

Проверка исполняемого кода -

val tempview = "temptest"
val path = "/mnt/test/"
var df = Seq(
  (8, "bat"),
  (64, "mouse"),
  (-27, "horse")
).toDF("number", "word")

df.createOrReplaceTempView(tempview)

df = sqlContext.sql("select 'a' as first, ' ' as second, number, word from temptest")

df.write.mode(SaveMode.Overwrite).option("sep", ",").csv(path)
val l = dbutils.fs.ls(path)
val file = l(l.size - 1)
val output = dbutils.fs.head(path + file.name)
println(output)

Вывод - a,\"\",-27,horse

Ожидаемый вывод - a, ,-27,horse

1 Ответ

0 голосов
/ 09 октября 2018

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

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

По моему опыту, библиотека CSV в Spark, хотя и неплохая, не очень настраиваема.Просто возьми то, что получишь.Мне пришлось загружать данные как RDD, а затем анализировать из-за отсутствия конфигурируемости.CSV - не лучший формат данных для Spark.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...