PySpark需求:对比不同列子串生成Required_column布尔值
PySpark 实现 Required_column 生成方案
核心思路
- 提取
column_1中开关值的前4个字符作为匹配基准 - 对
column_2做以下处理:- 按逗号分割成独立开关值列表
- 去除每个开关值前后的多余空格(适配空格数量不固定的情况)
- 提取每个开关值的前4个字符
- 检查列表中是否存在与基准匹配的字符,返回对应布尔值
实现代码
from pyspark.sql import SparkSession from pyspark.sql.functions import col, substring, split, transform, trim, exists # 初始化SparkSession spark = SparkSession.builder.appName("SwitchPrefixMatch").getOrCreate() # 构造示例DataFrame sample_data = [ ("K12B-45-84-6", "K12B-02-36-504, I05O-21-65-312, A301-21-25-363", True), ("J020-35-2-9", "P12K-05-31-602, M002-22-22-636,L630-51-32-544", False), ("L006-85-00-694", "M10P-22-94-349,L006-85-00-694, I553-35-12-240", True), ("M002-22-36-989", "U985-12-45-363, M002-19-14-964", True) ] df = spark.createDataFrame(sample_data, ["column_1", "column_2", "Expected_Required_column"]) # 生成目标列Required_column result_df = df.withColumn( "Required_column", exists( transform( split(col("column_2"), ","), lambda val: substring(trim(val), 1, 4) ), lambda prefix: prefix == substring(col("column_1"), 1, 4) ) ) # 查看结果 result_df.show(truncate=False)
代码细节说明
split(col("column_2"), ","):将column_2按逗号分割为开关值列表,自动适配不同数量的分隔空格trim(val):清除每个开关值前后的冗余空格,解决空格不固定的问题substring(..., 1, 4):提取开关值的前4个字符作为匹配依据exists(..., lambda x: x == ...):遍历处理后的前缀列表,判断是否存在与column_1前缀匹配的元素,存在则返回True,否则返回False
内容的提问来源于stack exchange,提问作者Bella_18
相关产品推荐
相关产品推荐

