Scala 创建固定宽度的文本文件

Scala 创建固定宽度的文本文件,scala,apache-spark,Scala,Apache Spark,晚上好 我正在制作一个应用程序,其中我读取一个文件,在处理完数据后,我有一个包含信息的数据框,程序输出需要是一个固定宽度的文本文件,其中包含该数据框中的数据 布局应该是这样的 以粗体显示值​​必须替换,此布局是固定的,仅更改值 01 DATA DO RECEBIMENTO...... : **24/01/2011** 01 DATA DO PROCESSAMENTO... : **27/01/2011** 01 PERIODO DA REMESSA...... : **17/01/20

晚上好

我正在制作一个应用程序,其中我读取一个文件,在处理完数据后,我有一个包含信息的数据框,程序输出需要是一个固定宽度的文本文件,其中包含该数据框中的数据

布局应该是这样的

以粗体显示值​​必须替换,此布局是固定的,仅更改值

01 DATA DO RECEBIMENTO...... :  **24/01/2011**
01 DATA DO PROCESSAMENTO... :   **27/01/2011**
01 PERIODO DA REMESSA...... :   **17/01/2011 A 23/01/2011**
01 TIPO DE REMESSA......... :   **RN**
01
01
01 A) REGISTROS DE CARROS.................................................................................................     **4.963**
01
01 B) REGISTROS DE MOTOS...............................................................................................        **88**
01
01 C) REGISTROS DE MULTAS.................................................................................................     4.875
01
01 D) TIPOS DE MULTAS...................................................................................................       377
01      A................................       157
01      B................................       199
有人知道使用数据框中的数据生成固定宽度文本文件的最佳方法是什么吗


我需要在此布局中生成一个文件,因为我会将此信息发送到大型机

我们可以使用
lpad
rpad
函数生成固定宽度的数据帧,并在将数据帧写入HDFS时将
头保持为
false

示例:

import org.apache.spark.sql.functions._

df.show()
//+---+---+---+
//|  i|  j|  k|
//+---+---+---+
//|  1|  a|  b|
//|  2|  c|  d|
//+---+---+---+

//length of each field
val len_fixed_width= 10

//on all columns doing lpad and then concat all columns at the end
val df2=df.columns.foldLeft(df){ (tempdf, colName) =>
  tempdf.withColumn(colName, lpad(col(s"${colName}"),len_fixed_width," "))
}.selectExpr("concat(*) fixedwidth")

df2.show(false)

//+------------------------------+
//|fixedwidth                    |
//+------------------------------+
//|         1         a         b|
//|         2         c         d|
//+------------------------------+

//for rpad
val df3=df.columns.foldLeft(df){ (tempdf, colName) =>
  tempdf.withColumn(colName, rpad(col(s"${colName}"),len_fixed_width," "))
}.selectExpr("concat(*) fixedwidth")

df3.show(false)
//+------------------------------+
//|fixedwidth                    |
//+------------------------------+
//|1         a         b         |
//|2         c         d         |
//+------------------------------+

//writing to filesystem(HDFS,s3..etc)
df3.write.option("header","false").csv("hdfs_path")

您好,用户72495,您似乎将此问题标记为R。您希望使用R编程语言吗?@IanCampbell哦,不,对不起。只有scalaDataframe不会在序列被分发时保持它,如果您从Dataframe编写它,文本文件中的行将被洗牌。