我发现自己使用PySpark并使用Spark DataFrame ,其中 DataFrame 的每一行都包含此信息(将始终相同),尽管“树”、“草”和“杂草”中的值可能会有所不同“ .
{tree={in_season=true, index={color=null, category=null, value=null}, display_name=Tree, data_available=false}, weed={in_season=false, index={color=null, category=null, value=null}, display_name=Weed, data_available=false}, grass={in_season=true, index={color=null, category=null, value=null}, display_name=Grass, data_available=false}}
我想要做的是保留一些字段,例如,从“树”中保留字段“in_season”、“index -> value”、“display_name”等。
数据框具有以下架构:
df2.printSchema()
- 数据:地图(可为空=真)
- 键:字符串
- 值:字符串(valueContainsNull = true)
- 类型:字符串(可为空=真)
- 植物:字符串(可为空=真)
到目前为止,我尝试的是使用 StructType() 如下:
schema = ArrayType(
StructType([StructField("tree", StringType())]))
df3 = df2.withColumn("tree", from_json(df2.types, schema))
对于数据帧的每一行,我得到的结果都是 NULL。
有没有其他方法可以做到这一点,或者我必须以另一种方式使用 StructType 吗?
非常感谢您的帮助!
对于您的问题,使用explode 可能很有用。链接到处理它的文章:PySpark explode array and map columns to rows