Spark DataFrame依据数组colB筛选嵌套数组colA生成新嵌套列
Spark DataFrame 数组列过滤实现方案
直接修改filter高阶函数内的判断逻辑,使用Spark内置的array_contains方法判断id是否在colB数组中即可,代码实现如下:
inputDF .withColumn( "colC", expr( "filter(colA, colA_struct -> array_contains(colB, colA_struct.id))" ) )
逻辑说明
array_contains(数组列, 匹配值)是Spark SQL原生提供的数组判断函数,会自动遍历数组判断匹配值是否存在,返回布尔值- 过滤逻辑会保留colA中所有id字段在colB数组里的结构体,和期望输出完全匹配
边界场景适配(可选)
如果需要处理colB为null的场景,可以自行扩展判断条件:
- colB为null时返回空数组:
filter(colA, colA_struct -> colB is not null and array_contains(colB, colA_struct.id)) - colB为null时返回完整colA数组:
filter(colA, colA_struct -> colB is null or array_contains(colB, colA_struct.id))
内容的提问来源于stack exchange,提问作者Venkata
相关产品推荐
相关产品推荐

