Details
-
Bug
-
Status: Resolved
-
Critical
-
Resolution: Fixed
-
0.13.0
-
java8 arrow-java 0.13.0
Description
I can't transfer using apache arrow-flihgt. Contains listvector data. The problem description is as follows:
- I parse an xml file and convert it to an arrow format and finally convert it to a parquet data format. The address of the .xml file data is url http://www.w3school.com.cn/example/xmle/cd_catalog.xml
- I created a schema that uses listvector.
code show as below:
List<FiledVector> list = childrenBuilder.add(ListVector.empty(column.getId().toString(),allocator));
VectorSchemaRoot root = VectorSchemaRoot.of(inVector)- Parse the xml file to get the list data in "cd". Use api use listvector.
`ListVector listVector = (ListVector) valueVectors;
List<Column> columns = column.getColumns();
Column column1 = columns.get(0);
String name = column1.getId().toString();
UnionListWriter writer = listVector.getWriter();
Writer.allocate();
For (int j = 0; j < column1.getColumns().size();j++) {writer.setPosition(j);
writer.startList();
Writer.list().startList();
Column column2 = column1.getColumns().get(j);
List<Map<String, String>> lst = (List<Map<String, String>>) ((Map) val).get(name);For (int k = 0; k < lst.size(); k++) {
Map<String, String> stringStringMap = lst.get(k);
String value = stringStringMap.get(column2.getId().toString());
Switch (column2.getType())Unknown macro: { Case FLOAT}}
Writer.list().endList();
writer.endList();
}`4.
After the write is complete, I will send to the arrow-flight server. server code :
@Override
public Callable<Flight.PutResult> acceptPut(FlightStream flightStream) {return () -> {
try (VectorSchemaRoot root = flightStream.getRoot()) {
while (flightStream.next()) {
VectorSchemaRoot other = null;
tryUnknown macro: { logger.info(" Receive message ...... size}catch (Exception e)
Unknown macro: { logger.error(e.getMessage(), e); }}
}return Flight.PutResult.parseFrom("ok".getBytes());
};}
But the server did not receive any information.!! it is error .
client code :
root = message.getRoot();
//client.close();
FlightClient.ClientStreamListener listener =
client.startPut(FlightDescriptor.path(message.getFilename()), root);
listener.putNext();
listener.completed();
client.close();
listener.putNext();
listener.completed();
Flight.PutResult result =
listener.getResult();
String s = new String(result.toByteArray());
System.out.println(s);
Attachments
Attachments
Issue Links
- links to