apache / apache/arrow-java

[Java] Write list of maps with the vector API

オープン
#132 コメント 11 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
Java
スター
94
フォーク
152
平均マージ
3日 16時間
マージ済み PR(30日)
11

説明

### Describe the usage question you have. Please include as many useful details as possible.

I'd like to store list of maps. Not sure if I am doing it wrong or there is a bug in the implementation.
Here is my example:
```java
try (ListVector listVector = ListVector.empty("sourceVector", allocator)) {

UnionListWriter listWriter = listVector.getWriter();

listWriter.allocate();

/*
* [{"one" -> 1, "two" -> 2}, {"three" -> 3}, null, {"four" -> null, "five" -> 5}]
*/

listWriter.setPosition(0);
listWriter.startList();

listWriter.map().startMap(); // <-- exception is thrown from here
listWriter.map().startEntry();
listWriter.map().key().varChar().writeVarChar("one");
listWriter.map().key().integer().writeInt(1);
listWriter.map().endEntry();
listWriter.map().startEntry();
listWriter.map().key().varChar().writeVarChar("two");
listWriter.map().key().integer().writeInt(2);
listWriter.map().endEntry();
listWriter.map().endMap();

listWriter.map().startMap();
listWriter.map().startEntry();
listWriter.map().key().varChar().writeVarChar("three");
listWriter.map().key().integer().writeInt(3);
listWriter.map().endEntry();
listWriter.map().endMap();

listWriter.writeNull();

listWriter.map().startMap();
listWriter.map().startEntry();
listWriter.map().key().varChar().writeVarChar("four");
listWriter.map().key().integer().writeNull();
listWriter.map().endEntry();
listWriter.map().startEntry();
listWriter.map().key().varChar().writeVarChar("five");
listWriter.map().key().integer().writeInt(5);
listWriter.map().endEntry();
listWriter.map().endMap();

listWriter.endList();
```

When I execute this I'm getting the following exception:
```
java.lang.UnsupportedOperationException: Cannot get simple type for type MAP
at org.apache.arrow.vector/org.apache.arrow.vector.types.Types$MinorType.getType(Types.java:807)
at org.apache.arrow.vector/org.apache.arrow.vector.complex.impl.PromotableWriter.getWriter(PromotableWriter.java:275)
at org.apache.arrow.vector/org.apache.arrow.vector.complex.impl.AbstractPromotableFieldWriter.getWriter(AbstractPromotableFieldWriter.java:80)
at org.apache.arrow.vector/org.apache.arrow.vector.complex.impl.AbstractPromotableFieldWriter.startMap(AbstractPromotableFieldWriter.java:114)
at org.apache.arrow.vector/org.apache.arrow.vector.complex.impl.PromotableWriter.startMap(PromotableWriter.java:53)
```

### Component(s)

Java

コントリビューションガイド

コントリビューションガイドを開く

調査の方向性

ListVector、UnionListWriter、および map 書き込み呼び出しを使って Java の例を再現し、その後、startMap() が失敗する PromotableWriter のスタックトレースを調査します。vector API がこの list-of-maps の使用方法をサポートすべきかどうかを判断します。完了の条件は、例が報告された例外なしに、指定された map、null の list エントリ、null の map 値を書き込むことです。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
java
領域
data
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
説明が足りない
初心者へのやさしさ
35/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。