如何从包含map类型tags字段的Spark DataFrame提取指定key生成新DataFrame
你可以通过Spark内置的Map类型取值方法getItem提取tags列下的指定key值,再做类型转换即可实现需求:
Scala 实现代码
import org.apache.spark.sql.functions._ import org.apache.spark.sql.types.{StringType, LongType, StructType, StructField} // 你定义的目标schema val targetSchema = StructType( Array( StructField("place", StringType), StructField("population", LongType) ) ) val res = spark.createDataFrame( originalDF.select( col("tags").getItem("place"), col("tags").getItem("population").cast(LongType) ).rdd, targetSchema )
说明
- 代码中的
originalDF替换为你原始DataFrame的变量名即可 - Map类型列通过
getItem(键名)可以直接取出对应键的value,返回值类型和Map的value类型保持一致,这里默认是String cast(LongType)用于把提取到的人口数字符串转为Long类型,如果你使用的是Spark 3.0及以上版本,可以替换为try_cast,遇到非合法数值格式时会返回Null而非抛出任务失败异常- 最后通过
createDataFrame传入目标schema,确保输出DataFrame的结构和你要求的完全一致
内容的提问来源于stack exchange,提问作者EnesK
相关产品推荐
相关产品推荐

