Как выровнять заголовок столбца dataframe при записи CSV-файла в Spark? - PullRequest
0 голосов
/ 31 января 2019

В кадре данных для каждого столбца III я назначаю фиксированную ширину и сохраняю обратно в HDFS, но проблема в том, что я не получаю правильное выравнивание

Вот мой код:

val hdfs=spark.read.option("header","true").option("inferSchema","true").csv("hdfs://localhost:9000/user/akshathasai/fixedwidth.csv").toDF()
hdfs: org.apache.spark.sql.DataFrame = [Name: string, age: int ... 1 more field]

scala> val widths=Array(15,3,10)
widths: Array[Int] = Array(15, 3, 10)

scala> val df=hdfs.columns.zip(widths).foldLeft(hdfs){ (acc,x) => acc.withColumn(x._1,rpad(trim(col(x._1).cast("string")),x._2," "))}
df: org.apache.spark.sql.DataFrame = [Name: string, age: string ... 1 more field]

scala> df.coalesce(1).write.format("csv").option("header","true").option("delimiter","\t").save("hdfs://localhost:9000/user/akshathasai/sai3/fw21")

outputв HDFS выглядит следующим образом:

Name age    phonenumber
akshatha    27  9900090252
amrutha 28  9900902423
sharath 29  9900902878

Я хочу, чтобы вывод выглядел так, как показано ниже

Name            age  phonenumber
akshatha        27   9900090252
amrutha         28   9900902423
sharath         29   9900902878

1 Ответ

0 голосов
/ 31 января 2019

Spark csv модуль записи предоставляет следующие параметры :

  • ignoreLeadingWhiteSpace (по умолчанию true): флаг, указывающий, следует ли указывать начальные пробелы из записываемых значений или нет.пропущено.
  • ignoreTrailingWhiteSpace (по умолчанию true): флаг, указывающий, следует ли пропускать конечные пробелы из записываемых значений.

, которые в вашем случае должны быть установленыдо false, т.е.

 df.coalesce(1).write.format("csv")
   .option("ignoreLeadingWhiteSpace", "false")
   .option("ignoreTrailingWhiteSpace", "false")
   ...
   .save()
...