1

Kettle は初めてですが、今のところうまくいっています。しかし、これを行う方法がわかりません。

私はこのようなcsvを持っています

a, col1, col2, col3
a, col1, col2, col3
a, col1, col2, col3
b, col1, col2, col3
b, col1, col2, col3
c, col1, col2, col3
c, col1, col2, col3

最初の列はキー (a、b、c) で始まり、残りの列が続きます。私がやりたいのは、csv を読み込んで (カバーした)、キーに基づいて csv を分割することです。そのため、データの 3 つのチャンク/グループがあり、それらのデータの各チャンクを個別の json ファイルに変換します。取れると思います。

私が理解できないのは、データをグループ化し、それらの個別のグループごとに個別のアクション (json に変換) を実行することです。私が問題を抱えているjsonの作成ではありません。

データは多くの環境センサーのセンサー ネットワークからのものであるため、多くのキー、何百ものキーがあり、新しいキーが追加されます。配置が異なるため、ケトルの Hadoop 要素を使用せずに、ここで複製しようとしているのはパーティショニングの概念であるため、以前はこのデータを処理するために map reduce を使用しました。データを分割したら、別々のレコードとして別の場所にロードする必要があります。キーは、センサーの一意の ID (シリアル番号) です。

アイデアはありますか?

ありがとう

4

2 に答える 2

1

私があなたの質問を正しく理解していれば、「GROUP BY」ステップを使用して列 (つまり、データセットの最初のヘッダー) をグループ化し、これらをメモリに保存できます。

ここに画像の説明を入力

これが完了したら..パラメータループを使用して「変数を取得」し、複数のJSON出力を動的に生成します。以下の画像を確認してください。

ここに画像の説明を入力

JSON 出力ステップで、header1 などの変数を使用して複数のファイルを生成します。JSON 出力で行った変更の下で強調表示されています。

ここに画像の説明を入力

わかりにくい場合は、ここにサンプル コードをアップロードしました。

それが役に立てば幸い :)

于 2014-12-09T18:55:58.470 に答える
1

行に追加された文字列のような JSON で行のフィールドを出力する JavaScript を作成すると思います。

{"id":"a","col1":"1","col2":"2","col3":"3"}

次に、グループ ステップを使用して、ベース フィールドを「id」フィールドに設定し、「, で区切られた文字列を連結する」タイプの JavaScript 値を集約することができます。

{"id":"a","col1":"1","col2":"2","col3":"3"},{"id":"a","col1":"4","col2":"5","col3":"6"}, {"id":"a","col1":"7","col2":"8","col3":"9"}

その周りにいくつかのタグを追加すると、有効な json が作成されます。次に、javascript ステップを使用してファイル名を組み立てることができます。

var file_name="C:\\dir\\"+ id + ".txt";

テキスト ファイル出力を使用し、ファイル名フィールドを「file_name」に設定します。セパレーター/エンクロージャー オプションを削除して、余​​分な書式設定を行わないようにします。

于 2013-07-30T10:37:07.733 に答える