Skip to content

[Java] Write list of maps with the vector API #132

@gszadovszky

Description

@gszadovszky

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:

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions