Ano*_*son 6 exception apache-spark 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(),我看不到任何空格。至少不领先。我很肯定列名之间也没有任何空格。
在这一点上,我完全被阻止了!任何帮助将不胜感激。
这发生在我身上几次,试试这个:
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
Run Code Online (Sandbox Code Playgroud)
代码修剪并删除 Dataframe 中每一列的所有空格。
以下应该有效:
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()
Run Code Online (Sandbox Code Playgroud)
编辑:作为第一步,如果您只想检查哪些列有空格,您可以使用如下所示的内容:
space_cols = [column for column in df.columns if re.findall('\s*', column) != []]
Run Code Online (Sandbox Code Playgroud)
另外,检查是否有任何非字母数字(或空格)的字符:
non_alnum = [column for column in df.columns if re.findall('[^a-zA-Z0-9\s]', column) != []]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10472 次 |
| 最近记录: |