在Spark中编写CSV文件时如何对齐数据框列标题?

时间:2019-01-31 11:56:23

标签: scala apache-spark dataframe hdfs

在第III列的数据框中,分配固定宽度并存储回HDFS,但是问题是我没有正确对齐

这是我的代码:

M2_HOME

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")

我希望输出如下所示

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

1 个答案:

答案 0 :(得分:1)

火花csv writer provides following options

  
      
  • ignoreLeadingWhiteSpace(默认为true):一个标志,该标志指示是否应跳过正在写入的值中的前导空白。
  •   
  • ignoreTrailingWhiteSpace(默认为true):一个标志,用于定义是否应忽略写入值后的空白。
  •   

在您的情况下应设置为false,即

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