PySpark中用for循环添加哈希列报错,求解决方案
解决PySpark DataFrame添加哈希列的类型错误问题
问题根源
报错提示说明你的f_pseudo_cols列表里的元素不是列名字符串,而是Row对象(比如Row(field_name='Swis Code')),而sha2()函数需要接收字符串列名或Column对象作为第一个参数,直接传入Row对象就会触发类型错误。
解决方法
你需要从每个Row对象中提取出实际的列名字符串,再传入sha2()函数。假设每个Row对象的列名存储在field_name属性中,修改后的代码如下:
from pyspark.sql.functions import sha2 # 提取Row对象中的field_name作为列名 df.select("*", [sha2(c.field_name, 256).alias(f"hashed_{c.field_name}") for c in f_pseudo_cols])
额外注意事项
- 如果Row对象存储列名的属性不是
field_name,可以先打印f_pseudo_cols查看结构(比如print(f_pseudo_cols)),确认实际属性名后替换即可。 - 注意列名的大小写匹配:原DataFrame中的列是"Swis code",但Row里是"Swis Code",如果DataFrame列名是大小写敏感的,需要确保提取的列名和实际列名完全一致,否则会报列不存在的错误。
内容的提问来源于stack exchange,提问作者Krishna08
相关产品推荐
相关产品推荐

