parquet_cpp StreamWriter 没有向文件写入任何内容

parquet_cpp StreamWriter not writing anything to file

大家好,我正在使用 parquet_cpp 的 StreamWriter,但输出文件不是空的。连文件头都没有写,因为文件是一个4字节的文件。

std::shared_ptr<::arrow::io::FileOutputStream> outfile_{""};
std::string outputFilePath_ = "/tmp/part.0.parquet";
PARQUET_ASSIGN_OR_THROW(
    outfile_,
    ::arrow::io::FileOutputStream::Open(outputFilePath_)
)
// build column names
parquet::schema::NodeVector columnNames_{};
columnNames_.push_back(
    parquet::schema::PrimitiveNode::Make(
        "Time", parquet::Repetition::REQUIRED, parquet::Type::INT64, parquet::ConvertedType::UINT_64
    )
);
columnNames_.push_back(
    parquet::schema::PrimitiveNode::Make(
        "Value", parquet::Repetition::REQUIRED, parquet::Type::INT64, parquet::ConvertedType::UINT_64
    )
);
auto schema = std::static_pointer_cast<parquet::schema::GroupNode>(
    parquet::schema::GroupNode::Make("schema", parquet::Repetition::REQUIRED, columnNames_)
);
parquet::WriterProperties::Builder builder;
parquet::StreamWriter os_ = parquet::StreamWriter {parquet::ParquetFileWriter::Open(outfile_, schema, builder.build())};

// Start writing to os_, would be in a callback function
os_ << std::uint64_t{5} << std::uint64_t{59} << parquet::EndRow;

对于要写出的列名和数据,我似乎遗漏了一些微不足道的东西,但我在网上找不到任何东西。谢谢。

是的。 RowGroup 也必须被刷新。所以我只需要:

os_.EndRowGroup();

写出数据时,parquet 文件的页脚已损坏,无法读取。我在这个写出页脚问题上发布了一个问题 HERE