当前位置: 首页 > 知识库问答 >
问题:

如何用从拼花文件读取的spark数据框的空格删除/替换列名?[副本]

夹谷星纬
2023-03-14

我正在处理的数据集的列中有空格,我在尝试重命名Spark dataframe列名时遇到了麻烦。尝试了stackoverflow中几乎所有可用的解决方案。似乎没有什么工作。

注意:文件必须是拼花文件。

df。printSchema

root
|--类型:string(nullable=true)
|--时间戳:string(nullable=true)
|--ID: string(nullable=true)
|--Catg名称:string(nullable=true)
|--错误msg:string(nullable=true)

df.show()
错误:

警告:有一个弃用警告;重新运行-弃用以获取详细信息
org.apache.spark.sql.分析异常:属性名称"Catg Name"包含 " ,;{}()\n\t="中的无效字符。请使用别名重命名它。;

已尝试:

df.select(df.col("Catg Name").alias("Catg_Name"))    

然后df.print模式

root
|--类型:string(nullable=true)
|--时间戳:string(nullable=true)
|--ID: string(nullable=true)
|--Catg_Name: string(nullable=true)
|--Error_Msg: string(nullable=true)

效果很好,但当我使用df时。show()它会引发相同的错误。

警告:有一个弃用警告;使用-deprecation重新运行以获取详细信息
org。阿帕奇。火花sql。AnalysisException:属性名“Catg name”包含“,;{}()\n\t=”之间的无效字符。请使用别名重命名它。;

共有1个答案

应和悦
2023-03-14

通过删除列名中的空格并重新分配给Dataframe来实现这个想法怎么样?

val df1 = df.toDF("col 1","col 2","col 3") // Dataframe with spaces in column names

val new_cols =  df1.columns.map(x => x.replaceAll(" ", "")) // new column names array with spaces removed

val df2 = df1.toDF(new_cols : _*) // df2 with new column names(spaces removed)
 类似资料: