在第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
答案 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()