Java 将嵌套列表和结构的分层数据写入Apache Orc文件

Java 将嵌套列表和结构的分层数据写入Apache Orc文件,java,hadoop,hive,hierarchical-data,orc,Java,Hadoop,Hive,Hierarchical Data,Orc,将带有可选和重复字段的分层数据写入Orc文件的正确方法是什么 数据是JSON对象的列表。每个对象都有一个ID和指向DOM元素的分层路径。每个DOM元素都有一个可选标记和类列表: {id:1,层次结构:[ {标签:“div”,女士:[“蓝色”,“红色”]}, {标记:“p”} ]} {id:1,层次结构:[ {标记:“导航”,类:[“绿色”]}, {类:[“红色”]} ]} Orc(Java)中的模式如下所示: TypeDescription rootSchema=createStruct();

将带有可选和重复字段的分层数据写入Orc文件的正确方法是什么

数据是JSON对象的列表。每个对象都有一个ID和指向DOM元素的分层路径。每个DOM元素都有一个可选标记和类列表:

{id:1,层次结构:[
{标签:“div”,女士:[“蓝色”,“红色”]},
{标记:“p”}
]}
{id:1,层次结构:[
{标记:“导航”,类:[“绿色”]},
{类:[“红色”]}
]}
Orc(Java)中的模式如下所示:

TypeDescription rootSchema=createStruct();
addField(“id”,createInt());
类型描述DomeElementSchema=
createStruct()
.addField(“标记”,createString())
.addField(“类”,createList(createString()));
//第一个列表,因为每个JSON对象有一个层次结构。
//第二个列表,因为每个层次结构都有多个DOM元素。
addField(“层次结构”,createList(createList(domElementSchema));
对于如何为嵌套列表设置和,我感到困惑。到目前为止,我的代码如下所示:

private static void writeJsonToOrcFile(类型描述架构){
VectorizedRowBatch batch=schema.createRowBatchV2();
var id=(LongColumnVector)batch.cols[0];
var hierarchys=(ListColumnVector)batch.cols[1];
var domElems=(ListColumnVector)hierarchies.child;
var domElemStructs=(StructColumnVector)domElems.child;
var tags=(BytesColumnVector)domElemStructs.fields[0];
var classesList=(ListColumnVector)domElemStructs.fields[2];
var classes=(BytesColumnVector)classesList.child;
int-hierarciesOffset=0;
int classesOffset=0;
for(映射jsonNode:JsonSource.forPath(“my data.json”)){
//当前行。
int row=batch.size++;
//写入对象ID
ids.vector[row]=jsonNode.get(“id”).asLong();
JsonNode hierarchy=JsonNode.get(“hierarchy”);
层次结构。偏移量[行]=层次结构偏移量;
hierarchys.length[行]=hierarchy.size();
//家庭元素的关联偏移
对于(int i=0;i
这种方法正确吗

  • 层次结构
    根据层次结构数组的长度,将偏移量使用到
    domElems
  • domElems
    具有与
    domElemStructs
    的一对一映射
  • classesList
    使用行加上
    domElementIndex
    作为
    classes
    向量的偏移量