如何使用JSON Schema在Scala中验证DataFrame结构
用JSON Schema验证Pandas DataFrame结构的方案
没问题,我来帮你实现用给定的JSON Schema验证DataFrame结构的需求!下面是具体的步骤和代码示例:
1. 准备依赖库
首先确保你安装了pandas和jsonschema这两个库,如果没装的话,用下面的命令安装:
pip install pandas jsonschema
2. 编写验证代码
我们会把DataFrame的每一行转换成字典,然后用jsonschema库的validate函数逐一验证:
import pandas as pd from jsonschema import validate, ValidationError # 构造你的DataFrame data = { "id": ["5e5db036e0403b1a"], "migration": ["mig"], "number": [1], "string": ["str"] } df = pd.DataFrame(data) # 定义修正后的JSON Schema(后面会说明修正原因) schema = { "title": "Section", "type": "object", "additionalProperties": false, "required": ["migration", "id"], "properties": { "id": { "type": "string" # 新增id的类型定义,否则会违反additionalProperties规则 }, "migration": { "type": "string" }, "string": { "type": "string" }, "number": { "type": "number", "min": 0 } } } # 遍历每一行进行验证 for idx, row in df.iterrows(): row_dict = row.to_dict() try: validate(instance=row_dict, schema=schema) print(f"第{idx+1}行数据完全符合Schema要求 ✅") except ValidationError as err: print(f"第{idx+1}行数据不符合Schema要求 ❌: {err.message}")
3. 关键细节说明
- 关于Schema的修正:你原来的Schema里
additionalProperties设为false,意味着数据中不能出现Schema的properties里未定义的字段,但required里又包含了id,却没在properties里定义它的类型。这会导致验证失败,所以我给id补充了类型定义(根据你的DataFrame数据设为string)。如果你不需要严格限制额外字段,可以把additionalProperties改为true或者直接删除这个配置。 - 验证逻辑:我们遍历DataFrame的每一行,把行数据转成字典后传入
validate函数,它会自动对照Schema的规则(必填字段、数据类型、数值范围等)进行检查。 - 错误处理:如果某一行不符合规则,
ValidationError会返回具体的错误信息,帮你快速定位问题。
测试结果
运行上面的代码,你的测试数据会输出:
第1行数据完全符合Schema要求 ✅
如果修改数据(比如把number改成-1,或者删掉migration字段),就会触发错误提示,比如:
第1行数据不符合Schema要求 ❌: -1 is less than the minimum of 0
内容的提问来源于stack exchange,提问作者abarriel
相关产品推荐
相关产品推荐

