java读取Parquet文件到json输出

soat7uwm  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(755)

读取Parquet文件是可行的,但得到的是缩进格式,而不是所需的json输出格式。有什么想法吗?我想我可能需要更改grouprecordconverter,但找不到太多文档。如果能给我指一下,也会有帮助的。非常感谢你的帮助。

long num = numLines;
try {
  ParquetMetadata readFooter = ParquetFileReader.readFooter(conf, path, ParquetMetadataConverter.NO_FILTER);
  MessageType schema = readFooter.getFileMetaData().getSchema();
  ParquetFileReader r = new ParquetFileReader(conf,path,readFooter);

  PageReadStore pages = null;
  try{
    while(null != (pages = r.readNextRowGroup())) {
      final long rows = pages.getRowCount();
      System.out.println("Number of rows: " + rows);

      final MessageColumnIO columnIO = new ColumnIOFactory().getColumnIO(schema);
      final RecordReader recordReader = columnIO.getRecordReader(pages, new GroupRecordConverter(schema));
      String sTemp = "";
      for(int i=0; i<rows && num-->0; i++) {
        System.out.println(recordReader.read().toString())
      }
    }
  }
}

当前缩进输出:

data1: value1
data2: value2
models
  map
    key: data3
    value
      array: value3
  map
    key: data4
    value
      array: value4
data5: value5
...

所需的json输出:

"data1": "value1",
"data2": "value2",
"models": {
    "data3": [
        "value3"
    ],
    "data4": [
        "value4"
    ]
},
"data5": "value5"
...
yzuktlbb

yzuktlbb1#

javaparquet库的cat命令工具代码,也许可以作为一个例子。。。包含行:

org.apache.parquet.tools.json.JsonRecordFormatter.JsonGroupFormatter formatter = JsonRecordFormatter.fromSchema(metadata.getFileMetaData().getSchema());

请参阅此处获取完整源代码。

o2gm4chl

o2gm4chl2#

我将simplerecord的源代码修改为jsonObject方法

protected Object toJsonObject() {
    Map<String, Object> result = Maps.newLinkedHashMap();

    if (arrayElement()) {
      return handleArrayElement(result);
    }

    for (NameValue value : values) {
      result.put(value.getName(), toJsonValue(value.getValue()));
    }

    return result;
  }

相关问题