类 DefaultJsonHandler
Object
io.delta.kernel.defaults.engine.DefaultJsonHandler
- 所有已实现的接口:
JsonHandler
基于 Hadoop API 的
JsonHandler 默认实现。-
构造器摘要
构造器 -
方法摘要
修饰符及类型方法描述parseJson(ColumnVector jsonStringVector, StructType outputSchema, Optional<ColumnVector> selectionVector) 解析给定的 json 字符串,并以ColumnarBatch中的列形式返回outputSchema请求的字段。readJsonFiles(CloseableIterator<FileStatus> scanFileIter, StructType physicalSchema, Optional<Predicate> predicate) 读取并解析给定位置的 JSON 格式文件,并以ColumnarBatch的形式返回数据,其中包含physicalSchema请求的列。voidwriteJsonFileAtomically(String filePath, CloseableIterator<Row> data, boolean overwrite) 利用 `delta-storage` 中的LogStore实现,根据目标文件系统原子性地将数据写入文件。
-
构造器详细信息
-
DefaultJsonHandler
-
-
方法详情
-
parseJson
public ColumnarBatch parseJson(ColumnVector jsonStringVector, StructType outputSchema, Optional<ColumnVector> selectionVector) 描述从接口复制:JsonHandler解析给定的 json 字符串,并以ColumnarBatch中的列形式返回outputSchema请求的字段。对于特定的数据类型,应处理以下几种特殊情况
- FloatType 和 DoubleType: 处理编码为字符串的非数字
- NaN:
"NaN" - 正无穷大:
"+INF", "Infinity", "+Infinity" - 负无穷大:
"-INF", "-Infinity""
- NaN:
- DateType: 处理以
"yyyy-MM-dd"格式编码为字符串的日期 - TimestampType: 处理以
"yyyy-MM-dd'T'HH:mm:ss.SSSXXX"格式编码为字符串的时间戳
- 指定者
- 接口中的
parseJsonJsonHandler - 参数
jsonStringVector- 有效 JSON 字符串的字符串ColumnVector。outputSchema- 从解析的 JSON 返回的数据的模式。如果 JSON 字符串中缺少任何请求的字段,则返回的Row中该特定字段将返回 null。每个给定字段的类型应与 JSON 中的类型匹配。selectionVector- 可选的选择向量,指示要解析 JSON 的行。如果存在,则只应解析选定的行。未选定的行在返回的批处理中应全部为 null。- 返回
- 一个
ColumnarBatch,其模式为outputSchema,其中jsonStringVector中的每个条目都有一行。
- FloatType 和 DoubleType: 处理编码为字符串的非数字
-
readJsonFiles
public CloseableIterator<ColumnarBatch> readJsonFiles(CloseableIterator<FileStatus> scanFileIter, StructType physicalSchema, Optional<Predicate> predicate) throws IOException 描述从接口复制:JsonHandler读取并解析给定位置的 JSON 格式文件,并以ColumnarBatch的形式返回数据,其中包含physicalSchema请求的列。- 指定者
- 接口中的
readJsonFilesJsonHandler - 参数
scanFileIter- 要从中读取数据的文件的迭代器。physicalSchema- 从 JSON 文件中读取的列的选择列表。predicate- 可选的谓词,JSON 读取器可以选择使用它来修剪不满足谓词的行。由于修剪是可选的且可能不完整,调用者仍有责任对此方法返回的数据应用谓词。- 返回
- 一个
ColumnarBatch的迭代器,其中包含列格式的数据。调用者有责任关闭迭代器。返回的数据与scanFileIter中给定的文件顺序相同。 - 抛出
IOException- 如果在读取过程中发生 I/O 错误。
-
writeJsonFileAtomically
public void writeJsonFileAtomically(String filePath, CloseableIterator<Row> data, boolean overwrite) throws IOException 利用 `delta-storage` 中的LogStore实现,根据目标文件系统原子性地将数据写入文件。- 指定者
- 接口中的
writeJsonFileAtomicallyJsonHandler - 参数
filePath- 目标文件路径data- 要写入的 JSON 数据overwrite- 如果为true,则文件已存在时将被覆盖。如果为false且文件已存在,则抛出FileAlreadyExistsException。- 抛出
IOExceptionFileAlreadyExistsException- 如果文件已存在且overwrite为 false。
-