Pyspark 结构列:爆炸后的奇怪行为

Pyspark Struct columns: weird behavior after exploding

我正在处理一个嵌套的 json 文件,其中包含我需要展开的多个级别的数组。 我注意到,在我分解一个数组后,我创建的列中的值发生了变化,该数组与我要存储在该列中的值处于同一级别。这是一个可视化的例子:

jsonDF = jsonDF.withColumn("values_level1", explode("data.values"))
               .withColumn("name_level1", col("values_level1.name"))

到这里一切都很好,列“name_level1”包含我想在稍后阶段过滤的某些值。当我继续

时问题就开始了
.withColumn("values_level2", explode("values_level1.values"))

因为现在我在“name_level1”列中的值已经改变,我再也找不到我想稍后过滤的值。

这是我在概念上还没有理解的可以预料的事情吗(我对 Spark 还很陌生……)?我能以某种方式“保留”“name_level1”中的原始值吗?

非常感谢!

编辑:我正在添加一张可能有助于理解我的问题的图片:

为什么当我分解“值”时“名称”会改变?

我和一位同事谈过,他提供了一个有效的解决方案。使用

.withColumn("values_level2", explode_outer("values_level1.values"))

在“name_level1”

列中保留我需要的值