类 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
请求的列。void
writeJsonFileAtomically
(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"
格式编码为字符串的时间戳
- 指定者
- 接口中的
parseJson
JsonHandler
- 参数
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
请求的列。- 指定者
- 接口中的
readJsonFiles
JsonHandler
- 参数
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
实现,根据目标文件系统原子性地将数据写入文件。- 指定者
- 接口中的
writeJsonFileAtomically
JsonHandler
- 参数
filePath
- 目标文件路径data
- 要写入的 JSON 数据overwrite
- 如果为true
,则文件已存在时将被覆盖。如果为false
且文件已存在,则抛出FileAlreadyExistsException
。- 抛出
IOException
FileAlreadyExistsException
- 如果文件已存在且overwrite
为 false。
-