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

PySpark如何筛选empid非整数的行?解决现有方法无效问题

解决Spark筛选empid非整数行的问题

问题分析

你遇到的两个问题原因如下:

  1. filter(d2[“empid”].cast(“int”).isNull())无效:代码中使用了中文双引号,Spark无法识别列名,导致筛选逻辑不生效。
  2. subtract方法得到null,d而非D,d:将d2的empid转为整数后,原字符串"D"会被转为null,此时对比的是转换后的行,丢失了原empid的真实值,所以得到的是转换后的null,d而非原行。

正确解决方案

方案1:修正引号后使用cast筛选转换失败行

把代码中的中文双引号替换为英文双引号,Spark就能正确识别列名,转换失败的行(如"D"转int会返回null)会被筛选出来,同时保留原数据:

# 修正引号后的代码
d3 = d2.filter(d2["empid"].cast("int").isNull())

如果使用Spark 2.3及以上版本,推荐用try_cast(更明确表达“尝试转换”的语义,效果和cast一致):

from pyspark.sql import functions as F
d3 = d2.filter(F.try_cast(d2["empid"], "int").isNull())

方案2:用正则表达式直接匹配非整数行

不需要转换类型,直接通过正则判断empid是否为纯数字字符串,筛选不匹配的行:

from pyspark.sql import functions as F
# 匹配正整数(如果需要支持负整数,可改为"^-?\\d+$")
d3 = d2.filter(~F.col("empid").rlike("^\\d+$"))

这个方法更直观,能直接定位所有empid不是纯数字的行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 08:17:23