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

如何编写PySpark SQL查询返回review表text列单词数最多的行及词数

原有写法的问题

  • 第一种通过替换空格计算长度的方案:无法处理连续空格、换行符、制表符、标点分隔的场景,文本开头/结尾存在空格时计数也会出现偏差
  • 第二种按单空格拆分的方案:连续空格、换行、特殊符号分隔会产生大量空字符串被计入总长度,你遇到的4329异常高计数就是这个原因,评论里的ASCII画空行被拆成了大量无效空值统计到总数里

正确查询写法

query = """
SELECT 
    text,
    size(filter(split(text, '\\W+'), x -> x != '')) AS word_count
FROM review
ORDER BY word_count DESC
LIMIT 1
"""
# 执行查询,设置不截断文本内容
spark.sql(query).show(1, False)

逻辑说明

  • 用正则\\W+匹配所有非单词字符(空格、标点、换行、特殊符号等)作为分隔符拆分文本
  • 用filter函数过滤掉拆分产生的空字符串,避免无效内容计入统计
  • 末尾加LIMIT 1仅返回单词数最多的一行数据
  • 如果需要输出Word count = xxxx格式的统计结果,可调整查询如下:
query = """
SELECT 
    text,
    CONCAT('Word count = ', size(filter(split(text, '\\W+'), x -> x != ''))) AS word_count
FROM review
ORDER BY size(filter(split(text, '\\W+'), x -> x != '')) DESC
LIMIT 1
"""

可选更简洁方案:直接提取所有符合规则的有效单词再计数,适合需要自定义单词判定规则的场景

query = """
SELECT 
    text,
    size(regexp_extract_all(text, "[\\w']+", 0)) AS word_count
FROM review
ORDER BY word_count DESC
LIMIT 1
"""

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:15:03