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

PySpark:将DataFrame单行值作为常量列添加到另一DataFrame

实现方案

核心需求是把df1中单条记录的values值作为全局常量,追加到df2的所有行上,两种常用实现方式如下:


方式1:提取常量后用lit函数追加(推荐)

这个方式逻辑最直观,先取出df1里的固定值,再通过Spark内置的lit函数将值包装为常量列追加到df2,不会产生冗余shuffle。

PySpark 代码

from pyspark.sql.functions import lit

# 提取df1中的固定values值,df1仅1行时collect的开销可以忽略
const_val = df1.collect()[0]["values"]
result_df = df2.withColumn("values", lit(const_val))

Scala 代码

import org.apache.spark.sql.functions.lit

val constVal = df1.collect()(0).getAs[Seq[String]]("values")
val resultDf = df2.withColumn("values", lit(constVal))

提示:如果df1可能为空,建议先做行数校验再提取值,避免数组角标越界报错。


方式2:单行笛卡尔积关联

如果不想主动把值拉取到Driver端,可以直接用交叉连接,因为df1只有1行数据,关联后不会出现数据膨胀:

# 直接交叉连接两个DataFrame,df1仅1行时结果符合预期
result_df = df2.crossJoin(df1)

注意:这个方式必须严格保证df1有且仅有1行数据,如果df1存在多行,会导致结果行数按df1的行数倍数增长,不符合固定常量列的需求。


执行后输出的结果和预期完全一致:

+---+---------+---------------+
| id|   number|         values|
+---+---------+---------------+
|  1|    34523|[a, b, c, d, ..|
|  2|    56438|[a, b, c, d, ..|
|  5|    90342|[a, b, c, d, ..|
+---+---------+---------------+

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 11:21:19