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)
代码说明
- 正则表达式:
^(\d+|\d+-\d+)$^和$确保匹配整个字符串,避免部分匹配(比如不会误匹配HKA1774348里的数字片段)\d+匹配1个及以上数字|表示“或”,同时覆盖纯数字和带单短横线的数字格式
- 空值处理:区分SQL原生null和字符串类型的"null",按需调整过滤条件。
过滤后结果
执行代码后得到的目标列数据:
774970331205、160-27601033、217-29062806、176-07027893、724-22100374、297-00371663、217-11580074
内容的提问来源于stack exchange,提问作者elokema
相关产品推荐
相关产品推荐

