如何将字符串形式的嵌套整数数组转换为Scala Spark的List/Seq
解决方案
问题原因
你之前的代码仅完成了将字符串解析为circe Json抽象语法树的步骤,没有执行AST到Scala集合类型的解码操作,因此无法直接得到可用的List/Sequence。
场景1:纯Scala环境使用circe解析
可以直接通过circe的类型解码能力一步完成转换,不需要手动遍历Json结构:
// 导入必要依赖 import io.circe._ import io.circe.parser._ val jsonString = "[[1,2,100], [1, 2, 111]]" // 直接解码为嵌套List[List[Int]]类型 val parseResult = parse(jsonString).flatMap(_.as[List[List[Int]]]) // 安全获取结果,解析失败时返回空列表,可按需调整异常处理逻辑 val targetList = parseResult.getOrElse(List.empty[List[Int]]) println(targetList) // 输出:List(List(1, 2, 100), List(1, 2, 111))
场景2:Spark环境下解析
如果是在Spark作业中处理这类字符串字段,优先使用Spark内置的JSON解析能力,无需引入第三方依赖:
import org.apache.spark.sql.functions.from_json import org.apache.spark.sql.types.{ArrayType, IntegerType} // 定义和数据结构匹配的Schema:两层嵌套数组,元素为整型 val nestedArraySchema = ArrayType(ArrayType(IntegerType)) // 假设待处理字段名为json_str,解析后生成新字段parsed_seq val processedDf = originalDf.withColumn("parsed_seq", from_json($"json_str", nestedArraySchema))
解析后的parsed_seq字段类型为Array[Array[Int]],对应Scala的Seq[Seq[Int]],可直接用于后续Spark算子计算。
内容的提问来源于stack exchange,提问作者Rajendra Singh
相关产品推荐
相关产品推荐

