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

如何在PySpark DataFrame中提取字典数组指定Key的Value

解决方法

针对你的需求,不建议用正则处理结构化数据(容易因字段格式变化失效),直接利用PySpark对数组、结构体的原生支持来提取更可靠,以下是两种可行方案:

方案一:DataFrame API 方式

from pyspark.sql.functions import explode, col

# 将数组中的每个结构体拆分为单独行
df_exploded = df.withColumn("struct_item", explode(col("_2")))
# 筛选key为Colour的条目,提取对应的value
result_df = df_exploded.filter(col("struct_item.key") == "Colour") \
                       .select(col("struct_item.value").alias("colour_value"))
result_df.show()

方案二:SQL 方式

先将DataFrame注册为临时视图,再用SQL语句处理:

# 注册临时视图
df.createOrReplaceTempView("data_table")

# 执行SQL查询
result = spark.sql("""
    SELECT struct_item.value AS colour_value
    FROM data_table
    LATERAL VIEW explode(_2) AS struct_item
    WHERE struct_item.key = 'Colour'
""")
result.show()

为什么你的正则方法失效?

  1. 你在SQL中写的regexp_extract('_2', ...)是对字符串'_2'做匹配,不是对_2列的数据操作,应该去掉引号直接写_2;
  2. _2列是数组结构体类型,不是字符串类型,直接用正则处理会读取其字符串化后的格式,一旦字段顺序、空格变化就会匹配失败,完全不如结构化操作可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 09:26:01