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

Spark 2.4.4如何拆分数组列内字符串并转为JSON格式?

Spark 2.4.4不定长数组转指定JSON格式列解决方案

原DataFrame结构

|-- students: array (nullable = true)
 |    |-- element: string (containsNull = true)

原始数据

+--------------------------------------------------+
|                                          students|
+--------------------------------------------------+
|                            [(Alice:20), (Bob:13)]|
|[(James:39), (Robert:29), (Kevin:31), (Andrew:48)]|
|                                    [(Richard:88)]|
+--------------------------------------------------+

目标输出

+-----------------------------------------------------------------------------------------------------------+
|                                                                                               json_student|
+-----------------------------------------------------------------------------------------------------------+
|[{"name":"Alice","age":20},{"name":"Bob","age":13}]                                                        |
|[{"name":"James","age":39},{"name":"Robert","age":29},{"name":"Kevin","age":31},{"name":"Andrew","age":48}]|
|[{"name":"Richard","age":88}]                                                                              |
+-----------------------------------------------------------------------------------------------------------+

实现代码

Spark 2.4+支持transform函数,可直接遍历数组处理每个元素,无需担心数组长度不一致问题,具体代码如下:

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

val resultDF = df.withColumn(
  "json_student",
  to_json(
    transform(
      col("students"),
      elem => struct(
        split(elem, ":")(0).alias("name"),
        split(elem, ":")(1).cast("int").alias("age")
      )
    )
  )
)

// 查看结果
resultDF.show(truncate = false)

代码说明

  • transform(col("students"), ...):遍历students数组的每一个元素,对每个字符串执行转换逻辑
  • split(elem, ":"):将Alice:20这类字符串按冒号拆分为数组,取第0位作为name,第1位转为整数作为age,再用struct组合成结构化数据
  • to_json(...):将结构化的数组转换为JSON格式的字符串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 12:23:09