我正在尝试使用
将整个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(),我看不到任何空格。至少不领先。我非常肯定列名之间也没有空格。
在这一点上,我完全被封锁了!任何帮助将不胜感激。
答案 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
代码会修剪并删除数据框中每一列的所有空格。