pyspark与列重命名,下拉函数,u';参考模糊错误

pyspark与列重命名,下拉函数,u';参考模糊错误,pyspark,pyspark-sql,Pyspark,Pyspark Sql,我有一个函数,它用列表中的一组新标题更改DF的列标题 def updateHeaders(数据帧,newHeader): oldColumns=dataFrame.schema.names dfNewCol=reduce(lambda数据帧,idx:dataFrame.withColumnRename(oldColumns[idx],newHeader[idx]),xrange(len(oldColumns)),dataFrame) 返回dfNewCol 我从另一个函数中捕获newHeader

我有一个函数,它用列表中的一组新标题更改DF的列标题

def updateHeaders(数据帧,newHeader):
oldColumns=dataFrame.schema.names
dfNewCol=reduce(lambda数据帧,idx:dataFrame.withColumnRename(oldColumns[idx],newHeader[idx]),xrange(len(oldColumns)),dataFrame)
返回dfNewCol
我从另一个函数中捕获
newHeader
列表。列表中的第一个标题命名为
Action
。后来我应用了一个filter函数,在该函数中我删除
Action
列并创建一个新的DF

def将被插入(数据帧):
insertData=[“I”]#“Action”列的某些行包含值“I”
insertDF=dataFrame.filter(dataFrame.Action.isin(insertData)).drop('Action'))
返回insertDF
稍后我调用函数

DF1=updateHeaders(someDF,headerList)#更新标题
DF2=将被插入(DF1)#删除“操作”列并创建新的DF
结果是以下错误:

pyspark.sql.utils.AnalysisException:u'Reference'Action'不明确,可能是:Action#29,Action#221。;"

我在和其他类似问题中尝试了解决方法,到目前为止没有变化。有什么想法吗?

以下是一些使用udf重命名列的代码-希望这有帮助:

dataDf=spark.createDataFrame(data=[('Alice',4.300,None),('Bob',float('nan'),897)],schema=['name','High','Low'])
dataDf.show()

+-----+----+----+
| name|High| Low|
+-----+----+----+
|Alice| 4.3|null|
|  Bob| NaN| 897|
+-----+----+----+


newColNames=['FistName','newHigh','newLow']

def changeColNames(df,newColNameLst):
    for field,newCol in zip(df.schema.fields,newColNameLst):
        df = df.withColumnRenamed(str(field.name), newCol)
    return df

df2=changeColNames(dataDf,newColNames)
df2.show()

+--------+-------+------+
|FistName|newHigh|newLow|
+--------+-------+------+
|   Alice|    4.3|  null|
|     Bob|    NaN|   897|
+--------+-------+------+

不幸的是,这也返回了上述相同的错误。