Apache Spark拼接嵌套JSON字段提示struct类型错误如何解决?
问题根因
- 你提供的Schema中
forename和surname是DataFrame的顶级字段,并非嵌套在name结构体下的子字段。代码中使用col("name.forename")会让Spark尝试查找名为name的struct类型字段并提取子属性,和实际数据结构不匹配。 - 报错
need struct type but got string是因为你最终要把拼接结果存入name字段,即便原有DataFrame存在name字段,也是字符串类型,不可能用.操作符从字符串中提取子属性。
修复后代码
df = (df .withColumn("ingestion_date", current_timestamp()) .withColumn("name", concat(col("forename"), lit(" "), col("surname")))) )
补充说明
如果你实际处理的是嵌套JSON,forename确实存放在name结构体下,需要确认Schema符合以下结构才能使用name.forename的写法:
root |-- driverRef: string (nullable = true) |-- number: integer (nullable = true) |-- code: string (nullable = true) |-- name: struct (nullable = true) | |-- forename: string (nullable = true) | |-- surname: string (nullable = true) |-- dob: date (nullable = true)
内容的提问来源于stack exchange,提问作者Patterson
相关产品推荐
相关产品推荐

