PySpark错误:AnalysisException:'无法解析列名称

时间:2019-04-01 10:36:04

标签: apache-spark exception pyspark

我正在尝试使用

将整个df转换为单个向量列

df_vec = vectorAssembler.transform(df.drop('col200'))

我被抛出此错误:

File "/usr/hdp/current/spark2-client/python/pyspark/sql/utils.py", line 69, in deco raise AnalysisException(s.split(': ', 1)[1], stackTrace) pyspark.sql.utils.AnalysisException: 'Cannot resolve column name "col200" among (col1, col2..

我环顾了互联网,发现该错误可能是由于列标题中的一些空白引起的。问题是大约有1600列,要检查每一列都是一项艰巨的任务-特别是对于空白区域。我该如何处理?仅供参考,这是一个大约有800000行的df。

通过执行df.printSchema(),我看不到任何空格。至少不领先。我非常肯定列名之间也没有空格。

在这一点上,我完全被封锁了!任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

以下方法应该起作用:

import re
from pyspark.sql.functions import col

# remove spaces from column names
newcols = [col(column).alias(re.sub('\s*', '', column) \
for column in df.columns]

# rename columns
df = df.select(newcols).show()

编辑:作为第一步,如果您只想检查哪些列具有空格,则可以使用以下内容:

space_cols = [column for column in df.columns if re.findall('\s*', column) != []]

还要检查是否有非字母数字字符(或空格):

non_alnum = [column for column in df.columns if re.findall('[^a-zA-Z0-9\s]', column) != []]

答案 1 :(得分:0)

那件事发生在我身上几次,尝试一下:

tempList = [] #Edit01
    for col in df.columns:
        new_name = col.strip()
        new_name = "".join(new_name.split())
        new_name = new_name.replace('.','') # EDIT
        tempList.append(new_name) #Edit02
print(tempList) #Just for the sake of it #Edit03

df = df.toDF(*tempList) #Edit04

代码会修剪并删除数据框中每一列的所有空格。