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

Spark Scala 2.4使用from_json解析CSV中JSON列返回null问题排查

Spark Scala 2.4中from_json解析JSON列返回null的排查与解决

排查步骤与解决方案

  1. 检查读取后JSON列的原始内容
    先确认CSV读取后request列的内容是否为完整合法的JSON字符串,添加代码查看:

    input_df.show(false)
    

    如果输出中request列存在截断、多余空格或异常引号,说明CSV读取选项有误。

  2. 移除不必要的CSV读取选项
    你的代码中使用了escape="\"",但示例CSV的request列并未用双引号包裹,该选项会干扰JSON字符串的正常读取。修改读取代码:

    val input_df = spark.read.option("header", true).csv(json_file_input)
    
  3. 验证Schema与JSON格式匹配
    虽然你定义的Schema字段名和类型与示例JSON一致,但可以通过自动推断Schema交叉验证:

    val json_rdd = input_df.select("request").rdd.map(_.getString(0))
    val inferred_schema = spark.read.json(json_rdd).schema
    println(inferred_schema)
    

    对比推断出的Schema和你定义的json_schema_abc,确保字段名、类型完全匹配。

  4. 捕获解析错误(可选)
    使用try_json函数查看具体解析失败的行及原因(Spark 2.4+支持):

    import org.apache.spark.sql.functions.try_json
    input_df.select($"id", try_json(col("request"), json_schema_abc).as("json_request"), col("request")).show(false)
    

修正后的完整代码

val input_df = spark.read.option("header", true).csv(json_file_input)

// 验证request列内容(可选)
input_df.show(false)

val json_schema_abc = StructType(Array(
  StructField("Zipcode", IntegerType, true),
  StructField("ZipCodeType", StringType, true),
  StructField("City", StringType, true),
  StructField("State", StringType, true)
))

val output_df = input_df.select($"id", from_json(col("request"), json_schema_abc).as("json_request"))
                        .select("id", "json_request.*")

output_df.show(false)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 09:05:14