如何用PySpark将DataFrame数组嵌套结构体的size字段从String转Float?
解决PySpark数组中结构体字段类型转换问题
你尝试的代码无法生效,是因为withField方法用于修改顶层的结构体列,而received是一个数组列,数组中的每个元素才是结构体,不能直接对数组列使用withField。
要将received数组内每个结构体的size字段从string转为float,需要使用transform函数遍历数组中的每个结构体元素,再修改目标字段:
from pyspark.sql import functions as SF # 转换数组内结构体的size字段类型 df = df.withColumn( "received", SF.transform( "received", lambda struct_elem: struct_elem.withField("size", struct_elem["size"].cast("float")) ) )
代码说明
SF.transform("received", ...):遍历received数组的每一个元素(即结构体)lambda struct_elem: ...:对每个结构体元素执行操作struct_elem.withField("size", ...):修改当前结构体的size字段,通过cast("float")将原string类型转为float类型
执行后可以用df.printSchema()验证,received数组内结构体的size字段类型会变为float (nullable = true)。
内容的提问来源于stack exchange,提问作者José Henrique Davino
相关产品推荐
相关产品推荐

