将pyspark数据框写入文本文件
Posted
技术标签:
【中文标题】将pyspark数据框写入文本文件【英文标题】:writing pyspark data frame to text file 【发布时间】:2021-04-22 16:08:28 【问题描述】:我有一个 pyspark 数据框,它是从 sql server 中的一个表创建的,并且 我对此进行了一些转换,现在我将其转换为 动态数据框,以便将其保存为文本文件 在 s3 存储桶中。当我将数据框写入文本文件时,我将 向该文件添加另一个标题。
这是我将保存为文件的动态数据框:
AT_DATE | AMG_INS | MONTHLY_AVG
2021-03-21 | MT.0000| 234.543
2021_02_12| MT.1002 | 34.567
我想在保存文本文件时在其上添加另一个标题,我需要像这样添加另一行:
HDR,FTP,PC
AT_DATE,AMG_INS,MONTHLY_AVG
2021-03-21,MT.0000,234.543
2021_02_12,MT.1002,34.567
这是我需要在文本文件顶部添加的单独行。
【问题讨论】:
你能提供你已有的代码吗? 【参考方案1】:要将您的数据框保存为带有附加标题行的文本文件,您必须执行以下步骤:
准备你的数据数据框
由于您只能将一列数据帧写入文本,因此您首先使用 concat_ws spark SQL 函数将所有值连接到一个value
列中
然后使用 select
数据框方法删除除 value
列之外的所有列
您添加了一个 order
列,其字面值为 2
,稍后将使用它来确保标题位于输出文本文件的顶部
准备您的标头数据框
您创建一个 headers
数据框,每个所需的标题包含一行。每行有两列:
value
列包含作为字符串的标题
order
列包含作为 int 的标题顺序(0
用于第一个标题,1
用于第二个标题)
编写标头和数据数据帧的并集
您使用union
数据框方法将您的第一个数据框与headers
数据框合并
您使用coalesce(1)
数据框方法只输出一个文本文件
您使用 orderBy
数据框方法按您的 order
列对数据框进行排序
您删除了您的订单列
然后您编写生成的数据帧
完整代码
翻译成代码,它给你下面的代码sn-p。我打电话给你的动态数据框output_dataframe
和你的火花会话spark
我写信给/tmp/to_text_file
:
from pyspark.sql import functions as F
data = output_dataframe \
.select(F.concat_ws(',', F.col("AT_DATE"), F.col("AMG_INS"), F.col("MONTHLY_AVG")).alias('value')) \
.withColumn('order', F.lit(2))
headers = sparkSession.createDataFrame([('HDR,FTP,PC', 0), ('AT_DATE,AMG_INS,MONTHLY_AVG', 1)], ['value', 'order'])
headers.union(data) \
.coalesce(1) \
.orderBy('order')\
.drop('order') \
.write.text("/tmp/to_text_file")
【讨论】:
以上是关于将pyspark数据框写入文本文件的主要内容,如果未能解决你的问题,请参考以下文章
如何将存储在 HDFS 中包含行的文本文件转换为 Pyspark 中的数据框?