我正在处理的数据集的列中有空格,当我尝试重命名spark数据框列名时,我感到震惊。尝试了stackoverflow中几乎所有可用的解决方案。似乎没有任何作用。
注意:文件必须是实木复合地板文件。
df.printSchema
root
|-- Type: string (nullable = true)
|-- timestamp: string (nullable = true)
|-- ID: string (nullable = true)
|-- Catg Name: string (nullable = true)
|-- Error Msg: string (nullable = true)
df.show()
错误:
警告:有一项弃用警告;使用-deprecation重新运行以获取详细信息
org.apache.spark.sql.AnalysisException:属性名称“类别名称”在“,; {}()\ n \ t =“中包含无效字符。请使用别名重命名。
尝试过:
df.select(df.col("Catg Name").alias("Catg_Name"))
,然后 df.printSchema
root
|-- Type: string (nullable = true)
|-- timestamp: string (nullable = true)
|-- ID: string (nullable = true)
|-- Catg_Name: string (nullable = true)
|-- Error_Msg: string (nullable = true)
效果很好,但是当我使用 df.show()时,它会抛出相同的错误。
警告:有一项弃用警告;使用-deprecation重新运行以获取详细信息
org.apache.spark.sql.AnalysisException:属性名称“类别名称”在“,; {}()\ n \ t =“中包含无效字符。请使用别名重命名。
答案 0 :(得分:2)
通过删除列名中的空格并重新分配给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)