【问题标题】:How to align a dataframe column header when writing csv file in Spark?在 Spark 中写入 csv 文件时如何对齐数据框列标题?
【发布时间】:2019-06-24 21:11:54
【问题描述】:

在每列 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")

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

【问题讨论】:

  • 你能从输出的 csv 读回数据帧吗?
  • 你为什么要这个?,如果你使用 SparkHDFS,那么你的 CSV 应该是真的很大。大到不适合人类阅读/处理,另外因为文件很大,添加了空格(这会增加文件大小,从而在重新处理时增加读取时间) 仅用于 漂亮的印刷对我来说似乎是个坏主意。现在,如果这是最终的 "report" 输出...您可以使用 Python、Scala、Java 或您熟悉的任何其他语言进行格式化,或者将其导入 Excel 表格 (高管们喜欢 LOL).
  • 您在 HDFS 中查看输出的具体情况如何?色调?控制台命令?这里的问题不是分隔符,而是由于选项卡尺寸太小,显示没有正确对齐选项卡。
  • 这是我正在尝试使用示例输入文件实际上这需要处理 TB 的数据,只是在这里检查 hdfs 中的示例输出,我正在查看 hdfs 中的输出
  • 一旦我按照我的预期将数据存储在 hdfs 中,它已经显示输出,它应该具有适当的对齐方式,某些遗留系统将使用它们,所以它们对我有这个要求。请告诉如何在 scala 中进行格式化以获得正确的对齐方式。

标签: scala apache-spark dataframe hdfs


【解决方案1】:

火花csv writer provides following options:

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

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

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

【讨论】:

    猜你喜欢
    • 2020-06-01
    • 1970-01-01
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    • 1970-01-01
    相关资源
    最近更新 更多