2016-07-08 4 views
1

私は、Json.Netを使って新しい区切りのJSONを書く方法を探しています。 Google BigQueryにデータをエクスポートできるようにするには、これを行う必要があります。 - https://cloud.google.com/bigquery/data-formats#json_format改行を区切りにしてJsonを書く

現在のところ、私が見つけた唯一の方法はコレクションをループして各オブジェクトを1つずつシリアル化することですが、より良い方法。

私はこのprevious questionに出くわしたが、答えは唯一の改行を読み取る方法を説明し、それに

+0

現在動作しているコードがある場合は、何を尋ねていますか?解決に役立つ具体的な問題は何ですか? – dbc

+0

@dbcより良い方法があるかどうかを知りたいので。リストのコレクションをループするのではなく、コレクションをJsonシリアライザに渡す方法があるかどうかを知りたいのであれば、必要な方法でjsonをフォーマットできます。 –

+0

@JonClarke リストを新しい行区切りのJSONにフォーマット/保存することができるのであれば興味がありますか? 現時点では、C#オブジェクトをループしてシリアライズすることも同じことを行います。 –

答えて

1

を改行区切りJSONのようなものはありません書くことではないか、JSONを区切り。あなたが求めているのは、JSONオブジェクトを1行に分けて保存することです。

    :これは たくさん簡単に処理する並列なりますので、保管するこの方法が使用されているAzureのストリーム解析を含む多くのビッグデータとイベント処理製品で使用、ハイブ、Googleのビッグクエリなど

    です

  • 読み込み時には、実際にテキスト全体を解析せずに、1つのファイルを行単位で簡単に分割し、異なるスレッドや作業者に割り当てることができます。
  • テキスト全体を解析するのを待つことなく、行を個別に処理することができます。これにより、例えば非同期操作やデータフローを利用して同時に読み込みと解析を行うことができます。
  • 書き込み時に、複数のスレッドが異なるファイルにデータを書き込むことができ、すべてのファイルを1つのファイルにマージできます。 ディスクに書き込む場合でも、OSとディスクのバッファリングと操作のオーバーヘッドは、sendind X操作を同時に実行すると、X操作を順次実行するよりも速く終了することができます。
  • 各ワーカー/スレッドは、新しいレコードを直接書き込むことができます。パーサーは、ファイルを生成するためにすべてのレコードにアクセスする必要があります。このため

は、パーサがそれをサポートしていても、このようなファイルを生成するためのパーサを使用することをお勧めないです。シングルスレッドの実装は単純に遅すぎるため、すべてのレコードを書き出してから書き出す必要があります。

パフォーマンスを向上させるには、複数のファイルに書き込むことができます。別々のディスクに書き込み、最後にすべてのファイルを1つにまとめることができます。書き出す前に、すべてのレコードをメモリにロードするのではなく、生成されたときに各レコードを書き込むこともできます。

+0

正確に改行された形式のJSONがあります:http://ndjson.org/ – Koterpillar

+0

@Koterpillar no、それは* JSONではないものに与えられた非公式の名前です。上記の理由で使用されるのは改行で区切られたJSONフラグメントです。リンク先のGithubリポジトリは、改行を使用して開始された後*長い間作成されました。記載されている唯一の図書館は著者自身であり、決して更新されていません。これはフォーマットのサイトではなく、失敗したPRスタント –

+0

@Koterpillarと法律的な "spec"は本質的に役に立たない。これは実際の標準へのリンクです。それは、 "セパレータとして改行を使用する"と言うだけです。しかし、それは使用されているものではありません。改行はレコード全体を区切る以外は使用しないでください。 –

関連する問題