带有包含地图的数组的数据帧上的 Spark 过滤器

Posted

技术标签:

【中文标题】带有包含地图的数组的数据帧上的 Spark 过滤器【英文标题】:Spark filter on dataframe with array containing a map 【发布时间】:2022-01-23 02:09:06 【问题描述】:

我有一个带有模式的数据框,它有一个嵌套的地图值数组:

root
 |-- array_of_properties: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- name: string (nullable = true)
 |    |    |-- props: map (nullable = true)
 |    |    |    |-- key: string
 |    |    |    |-- value: string (valueContainsNull = true)

我需要在数组内的映射中过滤结构名称和一些特定键的值。我可以过滤名称:

dataframe.filter(array_contains(col("array_of_properties.name"), "somename"))

如何在嵌套 props 映射中的两个键的值上添加 AND 过滤器(例如,键名 is_enabled 的布尔值为 true 或 false,键名 source 和字符串test) 的值?

【问题讨论】:

【参考方案1】:

使用exists函数:

dataframe.filter("exists(array_of_properties, x -> x.name = 'somename' and x.props['is_enabled'] is true)")

【讨论】:

这行得通 - 谢谢。使用存在过滤器有什么缺点吗?

以上是关于带有包含地图的数组的数据帧上的 Spark 过滤器的主要内容,如果未能解决你的问题,请参考以下文章

具有大量列的数据帧上的 Spark 窗口函数

Spark:在scala中的数据帧上使用动态过滤器进行聚合

如何仅对 Spark 数据帧上的特定字段使用“立方体”?

数据帧上的 spark GROUPED_MAP udf 是不是并行运行?

pyspark 数据帧上的向量操作

spark - 在大型数据帧上执行 groupby 和聚合时,java 堆内存不足