Spark Dataframe в файл TXT без возврата каретки - PullRequest
1 голос
/ 24 сентября 2019

Я пытаюсь сохранить искровой фрейм данных в виде текстового файла.При этом мне нужно иметь определенный разделитель столбцов и разделителей строк.Я не могу заставить работать разделитель строк.Любая помощь будет принята с благодарностью.Ниже приведен пример кода для справки.

// опция -1

spark.sparkContext.hadoopConfiguration.set("textinputformat.record.delimiter", "\\§")
df.coalesce(1)
   .map(_.mkString("\u00B6"))
   .write
   .option("encoding", "US-ASCI")
   .mode(SaveMode.Overwrite).text(FileName)     

// опция-2

      df.coalesce(1)
      .write.mode(SaveMode.Overwrite)
      .format("com.databricks.spark.csv")
        .option("inferSchema", "true")
      .option("encoding", "US-ASCI")
        .option("multiLine", false)
      .option("delimiter", "\u00B6")
        .option("lineSep", "\u00A7")
      .csv(FileName1)

Ниже приведены мои входные и выходные данные для справки:

Ввод:

Test1,Test2,Test2
Pqr,Rsu,Lmn
one,two,three

Вывод:

Test1¶Test2¶Test2§Pqr¶Rsu¶Lmn§one¶two¶three

1 Ответ

0 голосов
/ 25 сентября 2019

В Spark 2.4.0 параметр «lineSep» можно использовать для записи json и текстовых файлов с помощью специального разделителя строк (см. DataFrameWriter spec ).Эта опция игнорируется в предыдущих версиях Spark и для формата csv.

val df = spark.createDataFrame(Seq(("Test1","Test2","Test2"), ("one","two","three")))

df.map(_.mkString("\u00B6"))
  .coalesce(1)
  .write
  .option("lineSep", "\u00A7")
  .text(FileName)

Вывод в Spark 2.4. *:

Test1¶Test2¶Test2§one¶two¶three

Вывод в Spark 2.3. * И ниже ("lineSep""опция игнорируется):

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