Как написать простой развернутый байтовый массив в Apache-Arrow ListWriter
В настоящее время я пишу некоторый код для преобразования произвольной структуры данных в векторы Apache Arrow и застрял на чем-то относительно простом, а именно, как написать byte[]
к ListVector
,
При записи данных в ListVector
через BaseWriter.ListWriter
Примитивные типы могут быть добавлены очень легко - т.е. writer.integer().writeInt(i)
или же writer.float4().writeFloat4(f)
,
Однако для типов переменной длины, таких как байты (или строки), остается только метод с сигнатурами, похожими на:
public void write(VarBinaryHolder h);
public void writeVarBinary(int start, int end, ArrowBuf buffer);
С VarBinaryHolder
будучи простым сгенерированным классом-оберткой для ArrowBuf
у этого даже нет конструктора.
Я ожидал что-то похожее на то, что VarBinaryVector
предложения, в которых есть Mutator
с setSafe(int index, byte[] bytes)
метод, который делает именно то, что ожидается.
Кроме того, кажется, нет простого способа обернуть массив байтов в ArrowBuf
Единственное, что я вижу, это чтобы записать данные на свежий VarBinaryVector
и выбирая основную ArrowBuf
после этого.
Итак, мои допросы:
- Это просто API отсутствует метод, или я даже не должен использовать вектор списка для хранения списков байтов 1?
- Есть ли другой очевидный способ сделать это, что я пропустил?
1 А VarBinaryVector
будет делать для простых случаев, но я хочу иметь возможность также вкладывать списки. Кроме того, способность списка содержать несколько типов также может быть полезна.