首页 > 解决方案 > 在 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:列不可迭代

我认为这将是一个常见的要求,因为镶木地板无法处理空间,但很难找到任何示例。

标签: python-3.xapache-sparkpysparkdatabricks

解决方案


您需要使用reduce函数迭代地对数据框应用重命名,因为在您的代码df2中只有最后一列重命名...

代码如下所示(而不是for循环):

df2 = reduce(lambda data, name: data.withColumnRenamed(name, name.replace('1', '2')), 
             names, df)

推荐阅读