You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pyspark如何筛选数组类型日期列包含的购买日期记录

PySpark 筛选数组包含指定字段值的记录解决方案

问题原因

原有写法报错的核心原因是:isin() 方法仅支持传入字面量值列表作为参数,不支持传入数组类型的列对象,因此会触发数据类型不匹配错误。

正确实现(适配Spark 2.4.3版本)

Spark 2.4+ 内置了array_contains函数,专门用于判断指定值是否存在于数组列中,实现步骤如下:

  1. 先确保concat_activeDt数组的元素类型和purchase_date字段类型一致,避免隐式类型转换失败
  2. 调用array_contains执行筛选

代码示例

# 导入依赖函数
from pyspark.sql.functions import array_contains, col

# 两个字段类型完全匹配时直接使用
result_df = all_purchases.filter(
    array_contains(col('concat_activeDt'), col('purchase_date'))
)

# 如果concat_activeDt是字符串数组、purchase_date是日期类型,转成同类型后筛选即可
result_df = all_purchases.filter(
    array_contains(col('concat_activeDt'), col('purchase_date').cast("string"))
)

执行效果

针对提供的样例数据,执行筛选后会保留前3条purchase_date存在于concat_activeDt数组中的记录,过滤后两条不符合条件的记录。

内容的提问来源于stack exchange,提问作者Sarah Rahman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 18:24:06