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

PySpark如何随机修改DataFrame中指定比例行的State字段值?

随机修改DataFrame中约50%行的State字段

以下代码会将DataFrame所有行的State字段随机替换为state_list中的字符串:

state_list = ['S1', 'S2', 'S3', 'S4']

def random_string():
    return random.choice(state_list)

def update_df(df):
    random_string_udf = udf(random_string, StringType())
    df = df.withColumn('State', lit(random_string_udf()))
    df.show()

update_df(df)

但实际需求是仅随机修改约50%的行,尝试以下两种方法均未成功:

  • 基于非随机条件修改:

    df = df.withColumn('State', when(df.State.like('%ADY%'), lit(random_string_udf())).otherwise(df.State))
    

    问题:该方法依赖固定匹配条件,无法实现随机选行修改。

  • 使用random.randint:

    df = df.withColumn('State', when(random.randint(0, 1)) == 1), lit(random_string_udf()).otherwise()
    

    问题:when要求传入Column类型的条件,不能直接使用Python原生布尔值。

经调整后,可行的实现方案如下:

df = df.withColumn('State', F.when(F.rand() <= F.lit(0.5), F.shuffle(state_array)[0]).otherwise(df.State))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 17:53:27