Spark Scala 2.4使用from_json解析CSV中JSON列返回null问题排查
Spark Scala 2.4中from_json解析JSON列返回null的排查与解决
排查步骤与解决方案
检查读取后JSON列的原始内容
先确认CSV读取后request列的内容是否为完整合法的JSON字符串,添加代码查看:input_df.show(false)如果输出中
request列存在截断、多余空格或异常引号,说明CSV读取选项有误。移除不必要的CSV读取选项
你的代码中使用了escape="\"",但示例CSV的request列并未用双引号包裹,该选项会干扰JSON字符串的正常读取。修改读取代码:val input_df = spark.read.option("header", true).csv(json_file_input)验证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,确保字段名、类型完全匹配。捕获解析错误(可选)
使用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
相关产品推荐
相关产品推荐

