我有以下(简化的)thrift定义。它包含一个递归的树状结构:
namespace java com.test.thrift
struct B {
1: list<A> aList,
2: i16 label
}
struct A {
1: list<B> bList,
2: i16 label
}
转换此定义的Java表示形式会导致堆栈溢出(无限循环)
val sType = org.apache.parquet.thrift.ThriftSchemaConverter.toStructType(classOf[com.test.thrift.A])
通过创建
的实例来调用org.apache.parquet.thrift.ThriftParquetWriter
递归是关于:
at org.apache.parquet.thrift.ThriftSchemaConverter.toStructType(ThriftSchemaConverter.java:82)
at org.apache.parquet.thrift.ThriftSchemaConverter.toThriftField(ThriftSchemaConverter.java:116)
at org.apache.parquet.thrift.ThriftSchemaConverter.toThriftField(ThriftSchemaConverter.java:131)
有没有办法在Parquet中使用递归数据结构?
感谢您的支持
答案 0 :(得分:0)
你可能有一个引用循环,这就是引导你进入堆栈溢出异常的原因(序列化程序会在事情爆炸之前跟踪引用)。
避免遇到此问题的可能解决方案可能是为每个标签添加标识符字段,并在 currScenario = mainTable.getElementsByName("acq_scenario.acq_scenario_summary").Item(0).getElementsByTagName("tr").Item(1).getElementsByTagName("td").Item(2).realValue 'gets string value for "Current Scenario" field, which I've unsuccessfully tried to use to manually update the "selected" attribute in the table
mainTable.getElementsByName("acq_scenario.acq_scenario_summary").Item(0).setAttribute "selected", "ScenarioName=" & currScenario
mainTable.getElementsByName("acq_scenario.acq_scenario_summary").Item(0).getElementsByTagName("tr").Item(0).setAttribute "class", "Skin_Selection_Color"
mainTable.getElementsByName("acq_scenario.acq_scenario_summary").Item(0).getElementsByTagName("tr").Item(0).style.setAttribute "highlight", "true"
或aList
中使用这些字段而不是参考。