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。
大家好,我正在使用 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。