如何使用复杂的嵌套结构修改Spark Dataframe?

时间:2016-04-20 04:08:34

标签: scala apache-spark apache-spark-sql spark-dataframe

我有一个复杂的DataFrame结构,并希望轻松地使列无效。我创建了隐式类,它们连接功能并轻松解决2D DataFrame结构,但是一旦DataFrame变得更复杂,使用ArrayType或MapType,我就没有太多运气了。例如:

我将架构定义为:

StructType(
    StructField(name,StringType,true), 
    StructField(data,ArrayType(
        StructType(
            StructField(name,StringType,true), 
            StructField(values,
                MapType(StringType,StringType,true),
            true)
        ),
        true
    ),
    true)
)

我想生成一个新的DF,它将MapType的字段data.value设置为null,但由于这是数组的一个元素,我无法弄清楚如何。我认为它类似于:

df.withColumn("data.values", functions.array(functions.lit(null)))

但最终会创建一个data.values的新列,并且不会修改数据数组的values元素。

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,并假设您不需要结果具有任何新字段或具有不同类型的字段,这是一种无需重新定义整个结构即可解决此问题的解决方案:Change value of nested column in DataFrame