【发布时间】:2021-08-16 11:53:56
【问题描述】:
我的 parquet 数据集列名在单词之间有空格,例如:BRANCH NAME。现在,当我用"_" 替换空格并尝试打印该列时,它会导致错误。下面是我的代码,有多种方法,后面跟着错误:
方法一:
Var df= spark.read.parquet("s3://tvsc-lumiq-edl/raw-v2/LMSDB/DESUSR/TBL_DES_SLA_MIS1")
for (c <- df.columns){
df = df.withColumnRenamed(c, c.replace(" ", ""))
}
方法2:
df = df.columns.foldLeft(df)((curr, n) => curr.withColumnRenamed(n, n.replaceAll("\\s", "")))
方法 3:
val new_cols = df.columns.map(x => x.replaceAll(" ", ""))
val df2 = df.toDF(new_cols : _*)
错误:
org.apache.spark.sql.AnalysisException: Attribute name "BRANCH NAME" contains invalid character(s) among " ,;{}()\n\t=". Please use alias to rename it.;
下面是架构:
scala> df.printSchema()
root
|-- dms_timestamp: string (nullable = true)
|-- BRANCH NAME: string (nullable = true)
|-- BRANCH CODE: string (nullable = true)
|-- DEALER NAME: string (nullable = true)
|-- DEALER CODE: string (nullable = true)
|-- DEALER CATEGORY: string (nullable = true)
|-- PRODUCT: string (nullable = true)
|-- CREATION DATE: string (nullable = true)
|-- CHANNEL TYPE: string (nullable = true)
|-- DELAY DAYS: string (nullable = true)
我还提到了多个 SO 帖子,但没有帮助。
【问题讨论】:
-
可以添加示例数据吗?
-
我无法打印数据,因为当我尝试打印时,它给出了同样的错误
-
您的方法 3 应该肯定可以工作,可能是检查是否有任何其他特殊字符,您可以在更改列名之前检查 df.show(false) 吗?
-
导致错误
-
df.show(false)会出现什么错误
标签: scala apache-spark hadoop bigdata