あなたはGoogleのプロトコルバッファ形式でCSVデータを表現することはできますか?
-
21-08-2019 - |
質問
私は最近、プロトコル・バッファーを知ったきたし、彼らは私の特定の問題に適用することができればと思いまして。
は、基本的に私は、ファイルのいくつかは、いくつかのギグあるような記憶のために、よりコンパクトな形式に変換する必要があるいくつかのCSVデータを持っています。
CSVの各フィールドには、ヘッダを持っており、(時にはそこ桁のたくさんあると私はすべての数字を同じ方法で処理する必要があるため)2種類のみ、文字列と小数があります。しかし、それぞれのファイルはフィールドごとに異なる列名を持つことになります。
と同様に、私は保存する前に、ファイルに情報を追加できるようにする必要があり、元のCSVデータを取り込みます。そして、私は別のバージョンのファイルを扱うことで、この将来性を作るために期待していた。
だから、CSVファイル?
のように、データのランダムな名前の列の乱数をキャプチャするためのプロトコルバッファを使用することも可能です解決
まあ、それは確かに表現可能です。ような何かます:
message CsvFile {
repeated CsvHeader header = 1;
repeated CsvRow row = 2;
}
message CsvHeader {
require string name = 1;
require ColumnType type = 2;
}
enum ColumnType {
DECIMAL = 1;
STRING = 2;
}
message CsvRow {
repeated CsvValue value = 1;
}
// Note that the column is implicit based on position within row
message CsvValue {
optional string string_value = 1;
optional Decimal decimal_value = 2;
}
message Decimal {
// However you want to represent it (there are various options here)
}
私はそれが提供されますどのくらいの利益はよく分からない、心のあなたは...あなたは確かに多くの情報を追加することができます(csvfile内のメッセージに追加)し、将来の校正は、「通常のPBの道」である - 唯一のオプションフィールドを追加し、など。
他のヒント
まあ、いるProtobufネット(私のバージョン)は、通常の.NET型にそう何も(それが異なるスキーマには対応しませんので、すべての時間)に基づいていません。しかし、Jonのバージョンでは、動的なタイプを許可することがあります。個人的に、私はちょうどGZipStreamを通してそれをCSVを使用して実行したい - 。私はそれが目的のための罰金になります期待しています。
<時間>編集:実際に、私は忘れてしまった:いるProtobufネットは拡張可能なオブジェクトをサポートしていますが、少し注意する必要があります...それは完全なコンテキストに依存するであろう、私は期待しています。
。ネストされたデータのプラスJonのアプローチは、おそらくあまりにも動作します。