为 Spark SQL 寻找 ARRAY_CONTAINS 的替代解决方案

Posted

技术标签:

【中文标题】为 Spark SQL 寻找 ARRAY_CONTAINS 的替代解决方案【英文标题】:Looking for an alternative solution of ARRAY_CONTAINS for Spark SQL 【发布时间】:2018-09-22 23:23:56 【问题描述】:

我正在使用嵌套数据结构(数组)来存储 Spark 表的多值属性。我在 Spark SQL 中使用 array_contains(array, value) 来检查数组是否包含该值,但似乎存在性能问题。大型 Spark 表需要很长时间。有没有其他解决方案。

【问题讨论】:

【参考方案1】:

你没有提供很多关于你到底在做什么的细节——如果你经常访问数组中的值,如果可以有益于从数组中添加包含值的列,例如通过使用explode

【讨论】:

是的,这是个好主意。特别是,如果您使用 parquet 或 orc 之类的列存储格式存储此分解表:您可能能够相对较快地找到相应的行以供将来查询。我猜想存储数组的列式方式不提供对包含您在 ARRAY_CONTAINS 中请求的请求元素的行的 O(1) 访问。 我正在使用 Parquet 文件。 @Arnon Rotem-Gal-Oz 我正在连接两个表,其中连接条件基于 ARRAY_CONTAINS。如果我在JOIN操作之前将数组类型列爆炸,是否可行?

以上是关于为 Spark SQL 寻找 ARRAY_CONTAINS 的替代解决方案的主要内容,如果未能解决你的问题,请参考以下文章

选择具有最大值的行,并结合WHERE。 MAX和CAST,在spark.sql中

将 spark.sql 查询转换为 spark/scala 查询

快来寻找你的Spark!去灵岩山寺体验专属你的“心灵奇旅”

Spark SQL为JDBC查询生成错误的上限和下限

在 Spark 中执行聚合函数时出错:ArrayType 无法转换为 org.apache.spark.sql.types.StructType

Spark - 寻找重叠值或寻找共同朋友的变体