pyspark与列重命名,下拉函数,u';参考模糊错误
我有一个函数,它用列表中的一组新标题更改DF的列标题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
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|
+--------+-------+------+
不幸的是,这也返回了上述相同的错误。