問題タブ [data-processing]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
code-metrics - データを検証する際に循環的複雑度を減らす最善の方法は何ですか?
現在、null の結果を返す可能性があるデータベースから大量のデータを受け取る Web アプリケーションに取り組んでいます。アプリケーションの循環的複雑度を通過するとき、多くの関数の重みは 10 ~ 30 の間です。ほとんどの場合、数値が大きい関数の大部分には、次のような行がたくさんあります。
これが私の質問につながります。これらの数値を下げるための最善の方法は何ですか? 現在、関数の大部分を 10 未満にすることを考えています。
database - このデータ処理タスクにどのように取り組みますか?
2 億 5000 万の Web サイト URL を含むファイルがあり、それぞれに IP アドレス、ページ タイトル、国名、サーバー バナー (「Apache」など)、応答時間 (ミリ秒単位)、画像数などがあります。現時点では、これらのレコードは 25 GB のフラット ファイルにあります。
このファイルから次のようなさまざまな統計を生成することに興味があります。
- 国ごとに表される IP アドレスの数
- 国ごとの平均応答時間
- 画像数 v 応答時間
などなど
私の質問は、このタイプと規模の処理をどのように達成するか、またどのプラットフォームとツールを (合理的な時間内に) 使用するかということです。
Windows 上の MS SQL から Solaris 上の Ruby まで、すべての提案を受け入れます :-) DRY のボーナス ポイント (同じことを繰り返さないでください)。必要。
何が機能し、何を避けるべきかについてのコメントは大歓迎です。
java - 組み込み Java データベースを使用した Web からの CSV ファイルの処理
短いバージョン: データを長期間保持したくない場合、HSQLDB でプログラムによってデータベースを作成し、CSV データをロードするにはどうすればよいですか? 私のスキーマはファイルと正確に一致し、ファイルには適切な列名があります。
これは無人プロセスです。
詳細:
Web 経由でダウンロードした 3 つの CSV ファイルにいくつかの単純な SQL 手法を適用してから、いくつかの DTO を作成し、それを既存のコードで使用してさらに処理し、REST 経由で保存する必要があります。データベースをいじりたくないのですが、CSV ファイルは外部キーによってリンクされているため、メモリ内の組み込みデータベースを使用して作業を行い、すべてを破棄することを考えていました。
私は次のように動作するコマンドラインアプリを念頭に置いていました:
- HSQLDB に新しいデータベースを作成します。
- Apache HttpClient を使用して、3 つのスレッドで 3 つの HTTP GET を開始します。
- CSV を 3 つの HSQLDB MEMORY テーブルにインポートします。
- SQL を実行します。
- 結果を既存の DTO に解析します。
- 等...
項目 1 と 3 に役立つコードとユーティリティへのポインタを使用できます。また、検討すべき HSQLDB の代替手段はありますか?
algorithm - アナグラム単語をグループ化するためのアルゴリズム
単語のセットが与えられた場合、アナグラムの単語を見つけて、最適なアルゴリズムを使用して各カテゴリのみを表示する必要があります。
入力:
出力:
私が現在開発している最善の解決策はハッシュテーブルに基づいていますが、アナグラムワードを整数値に変換する方程式について考えています。
例:man =>'m' +'a' +'n'ですが、これでは一意の値は得られません。
なにか提案を?
C#の次のコードを参照してください。
問題は、メソッドをどのように開発するかGetUniqueInts(string [])
です。
makefile - Linux 用の無料の安全な分散 make システム
安全で無料の Linux 用の、言語にとらわれない優れた分散 make システムはありますか?
背景情報:
私は科学実験 (コンピューター サイエンスの実験) を実行します。この実験では、時には大きな依存関係ツリーがあり、時には数千または数万のツリー ノードが含まれることもあります。この依存関係ツリーは、データ ファイル、データ処理実行可能ファイル、および結果ファイルを対象としています。
私は何年にもわたって、次のようなさまざまな手法を試してきました。
- データベースを使用して独自の依存関係トラッカーを展開し、各ワーカー マシンでスクリプトを実行します。これは、特に非スクリプト言語で作業しようとすると、少し面倒になる可能性があります。
- すべての処理コマンドを単一の makefile に入れ、さまざまなワーカー マシンで手動で「構築」できる疑似ターゲットを使用します。これには特別なツールは必要ありませんが、手動で作業を均等なサイズの疑似ターゲット チャンクに分割し、各ワーカー ボックスで「make」を正しく呼び出すのは面倒です。
- distmake : 単一のメイクファイルからコマンドの実行を自動的に分散します...
私は基本的に distmake のようなものを探していますが、より安全です。私が知る限り、distmake は本質的に、各ワーカー ノードに大きく開いたバックドアを残します。
また、代替品が distmake よりも堅牢であるとよいでしょう。メインの distmake 呼び出しを中断すると、バックドア サーバーをシャットダウンできますが、ワーカー ノードで実行中のプロセスを適切に強制終了することはできません。
説明:
gccでコンパイルしてリンクするのではなく、メイクファイルでデータを処理しています。ドキュメントを読んだところによると、distcc は gcc を配布するための専用ツールです。ソースファイルの gcc ではなく、共有ファイルシステムでホストされている非常に大きなデータファイルで独自の実行可能ファイルを実行するので、distcc は役に立ちません。
ワーカー ノードは外部から見えるマシンなので、すべてのワーカー デーモンを少なくとも ssh と同じくらい安全にする必要があります。ソースを読まなくてもわかることですが、distmake ワーカー デーモンはポートを開き、それに接続するすべてのユーザーからのコマンドを受け入れます。デーモンを起動したユーザーとしてコマンドを実行します。
algorithm - 高速最小スパン
配列のリストと多くのセットアップ時間が与えられた場合、各配列の一部のサブスパンで最小値をすばやく見つける必要があります。コンセプト:
これを行う方法についての私の現在の考えは、各ノードが関連するスパンの最小値を含むデータ上にバイナリ ツリーを構築することです。そのようにして、1 つの行のスパンの最小値を見つけることは、それを構成するツリー ノードのみの最小値を見つけることで構成されます。このセットは各行で同じになるため、一度計算できます。
このアイデアに問題があるか、より良い方法が知られている人はいますか?
明確にするために、私が話しているツリーは、ルートノードに行全体の最小値が含まれ、各ノードの左側の子が親のスパンの左半分の最小値を持ち、右も同様。
このツリーを配列にマップし、セグメントの境界を計算して検索を高速化できるように定義することができます。
私が最適化しているケースは、入力セットが固定されており、事前に多くの時間を費やしているが、さまざまなスパンで多くの高速テストを実行する必要がある場合です。
java - SybaseIQの結果セットの最適な更新
次のことを行うSybaseIQデータベースv14のテーブルを更新するコードを書き直そうとしています。
- テーブル内のすべてのレコードを選択し、いくつかのデータをファイルに抽出します
- テーブル内の各レコードの抽出されたファイルフラグを更新します
現在、レコードがファイルに書き込まれると、その抽出フラグが更新されます。現在、テーブルには40 000レコードがあり、プロセスは40GBのデータベース一時スペースを使用します。問題のテーブルの各レコードには60個のフィールドが含まれ、最大で120文字の列が含まれます。
データベースサーバーは、テーブル内の各レコードのテーブル用に新しいバージョンのデータを作成していますか?時間の経過とともに、使用される40GBのアカウントを使用してデータベースサーバー上に一時データの雪だるま式を作成しますか?データを処理して最初にデータを抽出し、それをファイルに書き込んでから、一括更新を実行するのに最適な方法でしょうか。Sybase IQは一般的にアリーナで使用されていると理解しているので、データベースは挿入、削除、選択用に最適化されますが、更新ではパフォーマンスが低下しますか?sybaseデータベースのIQサーバーは、HP-UXとWindowsServer2003で同じように動作しますか。
architecture - 非階層型アプリケーションのパターン
エンタープライズアプリケーションアーキテクチャのパターンで、MartinFowlerは次のように書いています。
したがって、この本は、エンタープライズアプリケーションをレイヤーに分解する方法と、それらのレイヤーがどのように連携するかについて説明しています。ほとんどの重要なエンタープライズアプリケーションは、何らかの形式の階層化アーキテクチャを使用しますが、状況によっては、パイプやフィルターなどの他のアプローチが役立つ場合があります。私はそのような状況には立ち入りません。代わりに、階層化アーキテクチャが最も広く役立つため、そのコンテキストに焦点を当てます。
非階層化アプリケーション/アプリケーションの一部を構築するためにどのようなパターンが存在しますか?金融機関の統計モデリングエンジンを利用してください。データアクセス用のレイヤーがあるかもしれませんが、ほとんどのコードは単一のレイヤーにあると思います。そのようなレイヤーにGangofFourのパターンが表示されることを期待しますか?ドメインモデルはどうですか?OOを使用しますか、それとも純粋関数型ですか?
引用では、レイヤーの代替モデルとしてパイプとフィルターについて言及しています。データ処理を分解する方法としてパイプを使用するこのようなエンジンは簡単に想像できます。他にどのようなパターンがありますか?タスクのスケジューリング、結果の集約、作業の分散などの分野に共通のパターンはありますか?MapReduceの代替手段は何ですか?
perl - ファイルに対するフローベースのプログラミングに適した Perl モジュールは何ですか?
構成に基づいてファイルを処理するための優れた Perl モジュールは何ですか?
基本的に、データファイルを取得し、それらを列に分割し、いくつかの列に基づいていくつかの行を削除し、不要な列を削除し、それらをベースラインと比較し (変更が発生した場所に書き込みます)、データとコメントの csv をメタデータとして保存します。
サンプル ファイルは次のとおりです。
行ごとに別のファイル(ベースライン)と比較し、いくつかの異なる行が強調表示されます( I am use Tk::DiffText
)。
これがパイプラインです[is a pipe]
ファイル -> [分割] -> [作成を削除] -> [並べ替え] -> [比較] -> {ユーザーがジャンプしてコメントを書き込み、必要に応じてファイルを編集} -> [csv を保存] -> [コメントを保存]
本当の問題は、このようなパイプライン フローをモデル化して作成するのにどの perl モジュールが役立つかということです。さらに調査した結果、 http://en.wikipedia.org/wiki/Flow-based_programmingを見つけました。
csv - ファイル内のデータのグリッドを転置する最良の方法
2D グリッドに値の大きなデータ ファイルがあります。これらは、グリッド内のデータの後続の行がファイル内の後続の行になるように編成されています。各列はタブ文字で区切られています。基本的に、これは CSV ファイルですが、列ではなくタブが含まれています。
データを転置し(最初の行が最初の列になる)、別のファイルに出力する必要があります。これを行う最善の方法は何ですか?どの言語でもかまいません (Perl または C/C++ を使用することを好みます)。現在、ファイル全体をメモリに読み込む Perl スクリプトがありますが、単純に巨大なファイルがあります。