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

PySpark如何基于复杂JSON单个字段中的关键词过滤DataFrame行

问题根因

你现有代码的核心错误是错误地将列名作为字符串常量传入lower()函数,而非传入列对象:
你写的lower("composition")是把字符串字面量"composition"转为小写,计算结果永远是固定字符串"composition",自然不可能匹配到包含electronic circuits的内容,所以返回空结果。


场景1:使用PySpark DataFrame

首先导入列操作依赖的函数,正确引用列对象即可:

# 先导入需要的函数
from pyspark.sql.functions import col, lower

# 正确写法1:用col()明确指定列
ds = df_concat.filter(lower(col("composition")).like("%electronic circuits%"))

# 正确写法2:用DataFrame.列名的方式引用
ds = df_concat.filter(lower(df_concat.composition).like("%electronic circuits%"))

如果遇到换行符导致匹配不到的情况,可以改用rlike正则匹配,正则默认支持跨行匹配:

ds = df_concat.filter(lower(col("composition")).rlike(".*electronic circuits.*"))

场景2:使用Pandas DataFrame

Pandas的filter方法是用来筛选列的,不是筛选行的,之前的写法完全不适用,应该用布尔索引实现:

# 不区分大小写的匹配写法
ds = df_concat[df_concat["composition"].str.contains("electronic circuits", case=False, na=False)]

其中case=False表示忽略大小写,na=False表示如果字段为空默认返回不匹配,避免报错。

内容的提问来源于stack exchange,提问作者Smita Banerjee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:48:01