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

如何从含map类型tags列的Spark DataFrame筛选数据生成指定schema新表

错误原因

你之前写法失效的核心原因是:tags是Map[String, String]类型而非Struct类型,不存在key子字段,你尝试访问$"tags"("key")实际是在找map中key为"key"的value,自然匹配不到数据返回空。

正确实现代码

Map类型直接通过字段名(键名)或者字段名.getItem(键名)即可取出对应键的值,判断是否存在指定键可以用contains方法(Spark3+支持)或者配合map_keys+array_contains实现。

Spark 3.x 最简写法

import org.apache.spark.sql.functions._

val newdf = df
  // 过滤出tags中存在key=name的行,不需要过滤的话可以去掉这行
  .filter($"tags".contains("name"))
  .select(
    $"tags"("name").alias("place"),
    $"tags"("num_evacuees").alias("num_evacuees")
  )

低版本Spark兼容写法

import org.apache.spark.sql.functions._

val newdf = df
  .filter(array_contains(map_keys($"tags"), "name"))
  .select(
    $"tags".getItem("name").as("place"),
    $"tags".getItem("num_evacuees").as("num_evacuees")
  )

说明

  • 如果不需要过滤掉没有name键的行,直接省略filter步骤即可,不存在对应键时取值会自动返回null,符合你预期schema的nullable=true要求。
  • 如果你需要的num_evacuees对应的tag键名不是num_evacuees,替换成实际的key即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:48:01