python-3.x - 在 spark python 中重命名数据框列
问题描述
我有一个带有标题的 CSV,我想将其保存为 Parquet(实际上是一个增量表)
列标题中有空格,实木复合地板无法处理。如何将空格更改为下划线?
到目前为止,这是我从其他 SO 帖子中拼凑而成的:
from pyspark.sql.functions import *
df = spark.read.option("header", True).option("delimiter","\u0001").option("inferSchema",True).csv("/mnt/landing/MyFile.TXT")
names = df.schema.names
for name in names:
df2 = df.withColumnRenamed(name,regexp_replace(name, ' ', '_'))
当我运行它时,最后一行给了我这个错误:
TypeError:列不可迭代
我认为这将是一个常见的要求,因为镶木地板无法处理空间,但很难找到任何示例。
解决方案
您需要使用reduce
函数迭代地对数据框应用重命名,因为在您的代码df2
中只有最后一列重命名...
代码如下所示(而不是for
循环):
df2 = reduce(lambda data, name: data.withColumnRenamed(name, name.replace('1', '2')),
names, df)
推荐阅读
- javascript - Ejs 奇怪地显示多张卡片
- c# - 如何解决递归依赖C#
- javascript - 如何使这个开关盒动态化
- c - Clang 给出了令人困惑的错误消息“表达式中的预期值”
- wix - 从 Wix 安装程序从桌面删除文件
- mysql - 优化通过交集使用索引合并的查询
- solidity - TypeError:类型不可调用 - 编译时
- python - Python Pandas:获取先前值大于0的行
- python - 是什么限制了使用 Python C-API 的多线程应用程序的可扩展性?
- java - 如何在 Spring Boot 的另一个 Mapper 中使用一个 Mapper