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

PySpark技术问询:获取item列对应的values列关联值

在PySpark中根据item列提取values列的关联值

场景说明

假设你的数据结构如下(对应示例图内容):

  • item列:存储需匹配的目标键(字符串类型)
  • values列:存储关联的键值集合(常见为MapType映射或含键值对的嵌套数组)

解决方案

情况1:values列为MapType类型

如果values是键值对映射,直接用方括号语法或getItem提取对应值:

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

# 初始化SparkSession
spark = SparkSession.builder.appName("ExtractAssociatedValue").getOrCreate()

# 示例数据
data = [("apple", {"price": 5, "stock": 100}), ("orange", {"price": 3, "stock": 150})]
df = spark.createDataFrame(data, ["item", "values"])

# 用item列作为键,提取values中的对应值
df = df.withColumn("associated_value", col("values")[col("item")])

df.show()

情况2:values列为嵌套数组(含键值对)

如果values是包含(item, value)结构的数组,用filter+element_at组合提取:

from pyspark.sql.functions import filter, element_at, col

# 示例数据:values是含键值对的数组
data = [("apple", [{"item": "apple", "value": 5}, {"item": "orange", "value": 3}]), 
        ("orange", [{"item": "apple", "value": 5}, {"item": "orange", "value": 3}])]
df = spark.createDataFrame(data, ["item", "values"])

# 过滤出与item列匹配的数组元素,再提取value字段
df = df.withColumn("matched_element", filter(col("values"), lambda x: x.item == col("item")))
df = df.withColumn("associated_value", element_at(col("matched_element"), 1).value)

df.show()

补充处理

若存在匹配不到值的场景,可通过coalesce设置默认值:

from pyspark.sql.functions import coalesce, lit
df = df.withColumn("associated_value", coalesce(col("values")[col("item")], lit("无匹配值")))

内容的提问来源于stack exchange,提问作者Vijay Kumar Nielsen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 14:30:20