【问题标题】:Parquet: Recursive Thrift Data StructureParquet:递归 Thrift 数据结构
【发布时间】:2016-02-29 14:55:01
【问题描述】:

我有以下(简化的)节俭定义。它包含一个递归的树状结构:

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

递归是arround:

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 中使用递归数据结构?

感谢您的支持

【问题讨论】:

    标签: java recursion thrift parquet


    【解决方案1】:

    您可能有一个引用循环,这就是导致堆栈溢出异常的原因(序列化程序在事情发生之前尽可能长时间地跟踪引用)。

    避免遇到这种情况的一种可能解决方案是为每个标签添加一个标识符字段,并在 aListbList 中使用这些字段,而不是引用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-27
      • 2017-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多