csv 使用Pyspark将具有不同头的多个 Dataframe 保存到一个文件中

9rbhqvlz  于 2023-07-31  发布在  Spark
关注(0)|答案(1)|浏览(142)

我想将3个不同的 Dataframe 保存到一个文件中(如csv或txt)

  • df_1*

| 文件日期|FileTime|文件类型|文件操作| File Action |
| --|--|--|--| ------------ |
| 20230713| 17点12分23秒|ENS|更新内容| Update |

  • df_2*

| 姓名|邮政的|提供者| provider |
| --|--|--| ------------ |
| 杰米|一二三四五|ATT| ATT |
| 安妮|12145|威瑞森| Verizon |
| 约翰|三二一四五|ATT| ATT |
| 大卫|一四二一五|威瑞森| Verizon |

  • df_3*

| 总记录| TotalRecords |
| --| ------------ |
| 两百| 200 |
我希望文件看起来像这样。第一行为df1,中间为df2,最后一行为df3

1|20230713|17:12:23|ENS|Update
1|Jame|12345|ATT     
2|Anne|12145|Verizon 
3|John|32145|ATT     
4|David|14215|Verizon 
RC|200

字符串
所以,我正在尝试,但没有成功。

df1.coalesce(1).write.format("csv").option("sep","|").option("header", "false").save(output_path)
df2.coalesce(1).write.format("csv").option("sep","|").option("header", "false").save(output_path)
df3.coalesce(1).write.format("csv").option("sep","|").option("header", "false").save(output_path)


我可能漏掉了什么。我该怎么办?

vjrehmav

vjrehmav1#

我弄清楚了如何将多个数据框保存到一个管道分隔的文件中

import pyspark.sql.functions as F
import pyspark
from functools import reduce

def create_text_file(list_df, path, file_name):
    ### This function save multiple dataframes with different headers into one pipe delimited file (.txt file)

    # Concatenate the multi columns into one column, then separate the different column values with `|` and create a list of dataframes
    list_single_column_df = [df.select(F.concat_ws("|", *df.columns).alias("data")) for df in list_df]

    # Union a list of dataframes
    final_df = reduce(pyspark.sql.dataframe.DataFrame.unionByName, list_single_column_df)

    # Save dataframe into text 
     final_df.coalesce(1).write.format("text").mode("append").save(path)

list_df = [df_1, df_2, df_3]
create_text_file(list_df, path, file_name)

字符串
预期的输出应该是这样的

1|20230713|17:12:23|ENS|Update
1|Jame|12345|ATT     
2|Anne|12145|Verizon 
3|John|32145|ATT     
4|David|14215|Verizon 
RC|200

相关问题