我有一个存储在HDFS中的文件 part-m-00000.gz.parquet
我试图运行,hdfs dfs -text dir/part-m-00000.gz.parquet
但它已经压缩,所以我运行gunzip part-m-00000.gz.parquet
但它没有解压缩文件,因为它无法识别.parquet
扩展名.
如何获取此文件的架构/列名称?
我找不到关于Apache Parquet文件的任何简单的英文解释.如:
有关这些问题的任何帮助表示赞赏.
我的 C++ 应用程序基本上有面向行的/流数据 (Netflow),我想将数据写入 Parquet-gzip 文件。
查看parquet-cpp项目中的示例reader-writer.cc程序,看来我只能以柱状方式将数据喂给parquet-cpp:
constexpr int NUM_ROWS_PER_ROW_GROUP = 500;
...
// Append a RowGroup with a specific number of rows.
parquet::RowGroupWriter* rg_writer = file_writer->AppendRowGroup(NUM_ROWS_PER_ROW_GROUP);
// Write the Bool column
for (int i = 0; i < NUM_ROWS_PER_ROW_GROUP; i++) {
bool_writer->WriteBatch(1, nullptr, nullptr, &value);
}
// Write the Int32 column
...
// Write the ... column
Run Code Online (Sandbox Code Playgroud)
这似乎意味着我需要自己缓冲 NUM_ROWS_PER_ROW_GROUP 行,然后循环遍历它们,将它们一次传输到 parquet-cpp 一列。我希望有更好的方法,因为这似乎效率低下,因为数据需要复制两次:一次进入我的缓冲区,然后在一次将数据输入 parquet-cpp 一列时再次复制。
有没有办法将每一行的数据放入 parquet-cpp 而不必先缓冲一堆行?Apache Arrow 项目(parquet-cpp 使用)有一个教程,展示了如何将行数据转换为 Arrow 表。对于每一行输入数据,代码附加到每个列构建器:
for (const data_row& …
Run Code Online (Sandbox Code Playgroud)