28#pragma warning(disable: 4100)
30#pragma warning(disable: 4266)
32#pragma warning(disable: 4324)
34#pragma warning(disable: 4355)
36#pragma warning(disable: 4435)
38#pragma warning(disable: 4458)
40#pragma warning(disable: 4800)
43#include <arrow/io/interfaces.h>
44#include <arrow/status.h>
45#include <parquet/arrow/writer.h>
62 arrow::Status
Close()
override {
64 return arrow::Status::OK();
67 arrow::Status
Flush()
override {
69 return arrow::Status::OK();
72 arrow::Result<int64_t>
Tell()
const override {
80 arrow::Status
Write(
const void* data, int64_t nbytes)
override {
82 return arrow::Status::IOError(
"Write on closed stream");
84 myOStream.write(
reinterpret_cast<const char*
>(data), nbytes);
86 return arrow::Status::IOError(
"Failed to write to ostream");
88 return arrow::Status::OK();
105 ParquetFormatter(
const std::string& columnNames,
const std::string& compression =
"",
const int batchSize = 1000000);
116 void openTag(std::ostream& into,
const std::string& xmlElement);
131 bool closeTag(std::ostream& into,
const std::string& comment =
"");
144 myBuilders.push_back(std::make_shared<arrow::StringBuilder>());
146 myValues.push_back(isNull ?
nullptr : std::make_shared<arrow::StringScalar>(
toString(val)));
150 void writeAttr(std::ostream& ,
const std::string& attr,
const T& val) {
154 myBuilders.push_back(std::make_shared<arrow::StringBuilder>());
163 myBuilders.push_back(std::make_shared<arrow::DoubleBuilder>());
187 for (
const auto& field :
mySchema->fields()) {
188 if (field->name() == attrString) {
201 throw ProcessError(
TLF(
"Unexpected attribute '%', this file format does not support Parquet output yet.",
toString(attr)));
210 parquet::Compression::type
myCompression = parquet::Compression::UNCOMPRESSED;
219 std::shared_ptr<arrow::Schema>
mySchema = arrow::schema({});
225 std::vector<std::shared_ptr<arrow::ArrayBuilder> >
myBuilders;
231 std::vector<std::shared_ptr<arrow::Scalar> >
myValues;
259 myBuilders.push_back(std::make_shared<arrow::DoubleBuilder>());
261 myValues.push_back(isNull ?
nullptr : std::make_shared<arrow::DoubleScalar>(val));
265 myBuilders.push_back(std::make_shared<arrow::FloatBuilder>());
267 myValues.push_back(isNull ?
nullptr : std::make_shared<arrow::FloatScalar>((
float)val));
276 myBuilders.push_back(std::make_shared<arrow::Int32Builder>());
278 myValues.push_back(isNull ?
nullptr : std::make_shared<arrow::Int32Scalar>(val));
284 if (into.precision() > 2) {
287 myBuilders.push_back(std::make_shared<arrow::DoubleBuilder>());
289 myValues.push_back(std::make_shared<arrow::DoubleScalar>(val));
293 myBuilders.push_back(std::make_shared<arrow::FloatBuilder>());
295 myValues.push_back(std::make_shared<arrow::FloatScalar>((
float)val));
304 myBuilders.push_back(std::make_shared<arrow::Int32Builder>());
306 myValues.push_back(std::make_shared<arrow::Int32Scalar>(val));
std::string time2string(SUMOTime t, bool humanReadable)
convert SUMOTime to string (independently of global format setting)
SumoXMLTag
Numbers representing SUMO-XML - element names.
std::bitset< 96 > SumoXMLAttrMask
SumoXMLAttr
Numbers representing SUMO-XML - attributes.
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
bool closed() const override
arrow::Status Close() override
arrow::Status Flush() override
arrow::Status Write(const void *data, int64_t nbytes) override
ArrowOStreamWrapper(std::ostream &out)
arrow::Result< int64_t > Tell() const override