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

PySpark中如何过滤DataFrame列仅保留数字类编码?

PySpark DataFrame 列过滤:保留数字类编码(含短横线格式)

核心逻辑

通过正则表达式匹配筛选符合要求的字符串,同时排除空值:

  • 匹配纯数字字符串(如774970331205)
  • 匹配数字-数字格式的字符串(如160-27601033)

实现代码

先创建示例DataFrame模拟原始数据,再执行过滤:

from pyspark.sql import SparkSession
from pyspark.sql.functions import col

# 初始化SparkSession(未初始化时执行)
spark = SparkSession.builder.appName("FilterNumericCodes").getOrCreate()

# 模拟原始数据
data = [
    ("HKA1774348",), ("null",), ("774970331205",), ("160-27601033",),
    ("SGSIN/62/898805",), ("null",), ("LOCAL",), ("217-29062806",),
    ("null",), ("176-07027893",), ("724-22100374",), ("297-00371663",),
    ("217-11580074",)
]
df = spark.createDataFrame(data, ["main_column"])

# 过滤逻辑:排除空值 + 匹配符合格式的编码
filtered_df = df.filter(
    col("main_column").isNotNull() 
    & col("main_column") != "null"  # 若原始数据的"null"是字符串类型需加此行,SQL原生null仅用isNotNull即可
    & col("main_column").rlike(r"^(\d+|\d+-\d+)$")
)

# 查看结果
filtered_df.show(truncate=False)

代码说明

  1. 正则表达式:^(\d+|\d+-\d+)$
    • ^ 和 $ 确保匹配整个字符串,避免部分匹配(比如不会误匹配HKA1774348里的数字片段)
    • \d+ 匹配1个及以上数字
    • | 表示“或”,同时覆盖纯数字和带单短横线的数字格式
  2. 空值处理:区分SQL原生null和字符串类型的"null",按需调整过滤条件。

过滤后结果

执行代码后得到的目标列数据:

774970331205、160-27601033、217-29062806、176-07027893、724-22100374、297-00371663、217-11580074

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 12:45:44