PySpark合并两布尔列并优先保留true值的实现方法
PySpark布尔列合并优先保留true的实现方案
你之前使用的coalesce函数不符合需求的原因是:该函数仅会返回参数列表中第一个非空值,false属于合法非空布尔值,所以当第一列值为false时,不会去读取第二列的值,自然无法实现优先保留true的规则。
你需要的是布尔逻辑或的运算规则:同一行只要任意一列值为true,结果就为true,仅当两列都为false时结果才为false,对应有两种常见实现方式:
方法1:位或运算符实现(最简写法)
PySpark的列对象原生支持|位或运算符,直接对两列做运算即可:
from pyspark.sql import functions as F # 第一步:将两个DataFrame按行对齐,添加行号后join df1 = df1.withColumn("row_id", F.monotonically_increasing_id()) df2 = df2.withColumn("row_id", F.monotonically_increasing_id()) aligned_df = df1.join(df2, on="row_id", how="inner") # 第二步:运算得到合并后的label列 result_df = aligned_df.withColumn("label", F.col("label1") | F.col("label2")).select("label")
方法2:when函数显式定义规则(可读性更高)
如果需要明确写出判断逻辑,也可以用when函数实现:
result_df = aligned_df.withColumn( "label", F.when(F.col("label1") | F.col("label2"), True).otherwise(False) ).select("label")
两种方法对示例数据的运算结果都和你预期的输出完全一致。
内容的提问来源于stack exchange,提问作者LN3
相关产品推荐
相关产品推荐

