求助:基于Key匹配实现两个DataFrame列相乘(附错误代码)
PySpark实现Key匹配相乘逻辑方案
数据示例
Info表
| Key | value |
|---|---|
| A | 100 |
| B | 200 |
| C | 300 |
Reference表
| Key | percentage |
|---|---|
| A | 0.8 |
| B | 0.5 |
| D | 0.3 |
期望输出
| Key | result |
|---|---|
| A | 80 |
| B | 100 |
| C | 300 |
正确实现代码
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()
核心逻辑说明
- 左连接保留全量数据:用
left join确保Info表的所有行都被保留,即使在Reference表中没有匹配的Key - 空值判断处理:通过
when/otherwise分支逻辑,当匹配到有效的percentage值时执行相乘,否则直接沿用Info表的value值 - 精简输出列:最后只选择需要的Key和result列,避免冗余字段
内容的提问来源于stack exchange,提问作者jasondesu
相关产品推荐
相关产品推荐

