我有一个csv标题,我想保存为Parquet(实际上是一个三角表)
列标题中有空格,这是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:列不可编辑
我认为这将是一个共同的要求,因为Parquet地板不能处理空间,但这是很难找到任何例子。
3条答案
按热度按时间ruyhziif1#
你得到异常是因为-函数
regexp_replace
返回类型Column
但是功能withColumnRenamed
是类型例外String
.o7jaxewo2#
使用
.toDF
(或).select
并传递列列表以创建新的Dataframe。pkwftd7m3#
你需要使用
reduce
函数对Dataframe迭代应用重命名,因为在代码中df2
将只重命名最后一列。。。代码如下所示(而不是
for
循环):