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