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

在Django中用Spark读取JSON遇java.net.URISyntaxException错误求助

Spark读取JSON字符串报错URISyntaxException的原因与解决办法

问题原因

  • Spark的spark.read.json()方法是用来读取文件系统中的JSON文件的,参数必须是合法的文件路径(本地路径、HDFS路径等),不能直接传入JSON字符串内容。
  • 你把完整的JSON结构字符串当作参数传入时,Spark会将其视为文件URI解析,JSON里的特殊字符(如[、{、空格)会被URL编码,最终触发java.net.URISyntaxException错误。
  • CSV读取正常是因为你传入的csvFile是合法文件路径,和JSON场景的参数类型不匹配问题无关,也和你看到的Livy/Griffin bug没有关联。

解决方案

根据使用场景选择对应方法:

场景1:测试用小数据,直接用JSON字符串生成DataFrame

把JSON字符串解析为Python对象,再通过spark.createDataFrame()创建DataFrame:

import json

schema2 = ... # 你的预定义Schema

json_str = '''
    [
        {"name": "John Doe", "age": 30, "city": "New York"},
        {"name": "Jane Smith", "age": 25, "city": "London"},
        {"name": "Bob Johnson", "age": 35, "city": "Paris"}
    ]
'''
# 解析JSON为Python列表
data_list = json.loads(json_str)
# 创建带Schema的DataFrame
jsonDF = spark.createDataFrame(data_list, schema=schema2)

场景2:业务场景,JSON数据存储在文件中

将JSON内容保存到文件系统,传入文件路径给spark.read.json():

# 示例:本地文件路径或HDFS路径
jsonDF = spark.read.schema(schema2).json("./data/users.json")

场景3:通过文本方式解析JSON字符串

先把JSON字符串转为文本DataFrame,再用from_json函数解析:

from pyspark.sql.functions import from_json

schema2 = ... # 你的预定义Schema
json_file = '''
    [
        {"name": "John Doe", "age": 30, "city": "New York"},
        {"name": "Jane Smith", "age": 25, "city": "London"},
        {"name": "Bob Johnson", "age": 35, "city": "Paris"}
    ]
'''
# 创建单行文本DataFrame
text_df = spark.createDataFrame([(json_file.strip(),)], ["raw_json"])
# 解析JSON并展开字段
jsonDF = text_df.select(from_json("raw_json", schema2).alias("user_data")).select("user_data.*")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 04:32:42