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

求助:基于Key匹配实现两个DataFrame列相乘(附错误代码)

PySpark实现Key匹配相乘逻辑方案

数据示例

Info表

Keyvalue
A100
B200
C300

Reference表

Keypercentage
A0.8
B0.5
D0.3

期望输出

Keyresult
A80
B100
C300

正确实现代码

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

# 初始化Spark会话
spark = SparkSession.builder.appName("KeyMatchMultiply").getOrCreate()

# 构建Info DataFrame
info_data = [("A", 100), ("B", 200), ("C", 300)]
info_df = spark.createDataFrame(info_data, schema=["Key", "value"])

# 构建Reference DataFrame
ref_data = [("A", 0.8), ("B", 0.5), ("D", 0.3)]
ref_df = spark.createDataFrame(ref_data, schema=["Key", "percentage"])

# 左连接+计算结果
result_df = info_df.join(ref_df, on="Key", how="left") \
    .withColumn(
        "result",
        when(col("percentage").isNotNull(), col("value") * col("percentage"))
        .otherwise(col("value"))
    ) \
    .select("Key", "result")

# 查看结果
result_df.show()

核心逻辑说明

  1. 左连接保留全量数据:用left join确保Info表的所有行都被保留,即使在Reference表中没有匹配的Key
  2. 空值判断处理:通过when/otherwise分支逻辑,当匹配到有效的percentage值时执行相乘,否则直接沿用Info表的value值
  3. 精简输出列:最后只选择需要的Key和result列,避免冗余字段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 16:40:15