在 PySpark 中写入镶木地板的问题

Posted

技术标签:

【中文标题】在 PySpark 中写入镶木地板的问题【英文标题】:Question on writing to parquet in PySpark 【发布时间】:2021-01-19 17:05:43 【问题描述】:

我在 PySpark 中将 csv 文件转换为 parquet 时遇到了问题。当转换相同架构的多个文件时,它们不具有相同的架构,因为有时一串数字将被读取为浮点数,其他数字为整数等。列的顺序似乎也存在问题。似乎在将具有相同列但以不同顺序排列的数据帧写入 parquet 时,这些 parquet 无法在同一语句中加载。

如何将数据帧写入镶木地板,以便所有列都存储为字符串类型?如何处理列的顺序?在写入镶木地板之前,我是否应将所有数据帧的列重新排列为相同的顺序?

【问题讨论】:

默认情况下,当您使用 Spark 读取 CSV 文件时,所有列都是字符串类型。检查您在阅读时是否未启用架构推断 (inferSchema=True)。对于列顺序,只需在将其写入 parquet 之前使用 df.select(*ordered_columns_list) 【参考方案1】:

如果要对列进行排序并转换为字符串类型,可以这样做:

out_df = df.select([F.col(c).cast('string') for c in sorted(df.columns)])
out_df.write.parquet(...)

【讨论】:

以上是关于在 PySpark 中写入镶木地板的问题的主要内容,如果未能解决你的问题,请参考以下文章

pyspark:数据帧写入镶木地板

当我在蜂巢中写入镶木地板表时出现 Pyspark 错误

将小 PySpark DataFrame 写入镶木地板时出现内存错误

将pyspark的数据框写入镶木地板时出错

Pyspark 数据框写入镶木地板而不删除 /_temporary 文件夹

在 s3 pyspark 作业中创建单个镶木地板文件