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

Spark:如何将数组的数组转为字符串数组?无需UDF实现

Spark中无需UDF实现数组转字符串数组的方法

你需要将Array of Arrays类型的列转换为字符串数组列,原数据和期望结果如下:

原数据:

+--------------------------+
|field                     |
+--------------------------+
|[[1, 2, 3], [1, 2, 3], []]|
+--------------------------+

期望结果:

+--------------------------+
|field                     |
+--------------------------+
|["123", "123", ""]        |
+--------------------------+

可以通过Spark内置函数组合实现,完全不需要自定义UDF,以下是具体方案:


Scala 实现示例

import org.apache.spark.sql.functions.{transform, array_join, col}

// 假设原DataFrame名为df,目标列名为field
val resultDf = df.withColumn(
  "field",
  transform(
    col("field"),
    subArr => array_join(subArr.cast("array<string>"), "")
  )
)

PySpark 实现示例

from pyspark.sql import functions as F

// 假设原DataFrame名为df,目标列名为field
result_df = df.withColumn(
    "field",
    F.transform(
        F.col("field"),
        lambda sub_arr: F.array_join(sub_arr.cast("array<string>"), "")
    )
)

逻辑说明

  • transform:遍历外层数组的每个子数组,对每个子数组执行后续转换逻辑
  • subArr.cast("array<string>"):将Int类型的子数组转换为String类型数组,确保拼接操作的类型一致性
  • array_join(..., ""):将子数组的元素用空字符串拼接成单个字符串,空数组会直接返回空字符串,完全匹配需求

这种方式依赖Spark内置优化后的函数,性能比自定义UDF更优,避免了UDF带来的序列化/反序列化开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 16:50:19