データクリーニング (ETL) コアビジネスの MapReduce プログラムを実行する前に、まずデータをクリーンアップして、ユーザーの要件を満たさないデータを削除する必要があることがよくあります。クリーンアップ プロセスでは、多くの場合、Reduce プログラムではなく Mapper プログラムの実行のみが必要になります。 1.必要 フィールドの長さが 11 以下のログを削除します。 (1)入力データ ウェブログ (2)期待出力データ 各行フィールドの長さが11より大きい 2.需要分析 入力データは、マップ ステージのルールに従ってフィルタリングおよびクリーンアップする必要があります。 3.実装コード (1)LogMapperクラスを書く パッケージ com.atguigu.mapreduce.weblog; java.io.IOException をインポートします。 org.apache.hadoop.io.LongWritable をインポートします。 org.apache.hadoop.io.NullWritable をインポートします。 org.apache.hadoop.io.Text をインポートします。 org.apache.hadoop.mapreduce.Mapper をインポートします。 パブリッククラス LogMapper は Mapper<LongWritable, Text, Text, NullWritable> を拡張します{ テキスト k = 新しいテキスト(); @オーバーライド protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { // 1 1行のデータを取得します。String line = value.toString(); // 2 ログを解析する boolean result = parseLog(line,context); // 3 ログが不正なので終了 if (!result) { 戻る; } // 4 キーを設定する k.set(行); // 5 データを書き込む context.write(k, NullWritable.get()); } // 2 ログを解析する private boolean parseLog(String line, Context context) { // 1 インターセプト String[] fields = line.split(" "); // 長さが11より大きい2つのログは有効です if (fields.length > 11) { // システムカウンター context.getCounter("map", "true").increment(1); true を返します。 }それ以外 { context.getCounter("map", "false").increment(1); false を返します。 } } } (2)LogDriverクラスを書く パッケージ com.atguigu.mapreduce.weblog; org.apache.hadoop.conf.Configuration をインポートします。 org.apache.hadoop.fs.Path をインポートします。 org.apache.hadoop.io.NullWritable をインポートします。 org.apache.hadoop.io.Text をインポートします。 org.apache.hadoop.mapreduce.Job をインポートします。 org.apache.hadoop.mapreduce.lib.input.FileInputFormat をインポートします。 org.apache.hadoop.mapreduce.lib.output.FileOutputFormat をインポートします。 パブリッククラスLogDriver { パブリック静的void main(String[] args)は例外をスローします{ // 入力パスと出力パスは、コンピューターの実際の入力パスと出力パスに従って設定する必要があります args = new String[] { "e:/input/inputlog", "e:/output1" }; // 1 ジョブ情報を取得する Configuration conf = new Configuration(); ジョブ job = Job.getInstance(conf); // 2 jar パッケージをロードします job.setJarByClass(LogDriver.class); // 3 つの関連マップ ジョブを LogMapper.class に設定します。 // 4 最終出力タイプを設定する job.setOutputKeyClass(Text.class); ジョブの出力値クラスを設定します(NullWritable.class)。 // 削減タスクの数を0に設定する ジョブのタスク数を減らす(0) // 5 入力パスと出力パスを設定する FileInputFormat.setInputPaths(job, new Path(args[0])); FileOutputFormat.setOutputPath(ジョブ、新しいパス(args[1])); // 6 送信 job.waitForCompletion(true); } } 要約する 以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。 以下もご興味があるかもしれません:
|
<<: MySQL エラー: ロックを取得しようとしたときにデッドロックが見つかりました。トランザクションの解決策を再起動してください
>>: JSX を使用してマークアップ コンポーネント スタイルの開発を作成する例 (フロントエンドのコンポーネント化)
需要シナリオ:上司は、クローラーを使用してMySQLデータベースにデータを書き込んだり更新したり...
マウスをある領域の上に置くと、その領域に点線の境界線と線のアニメーションが表示されるというクールな効...
目次安定スロットル: 手ぶれ防止: 一定時間内に最後のタスクのみを実行します。スロットル: 一定期間...
国内市場ではIE6~7のサポートに対する一定の需要がまだありますが、フロントエンド開発者として、私た...
WebRTC は、Web Real-Time Communication の略で、Web リアルタイ...
lsof (開いているファイルのリスト) は、プロセスによって開かれたファイルを表示するツールです。...
1. HTMLファイルでechartをインポートする <!-- echarts をインポート ...
序文WeChat アプレットを開発する際には、ユーザーの権限が必要なページを使用する必要があることが...
外部 CSS ファイルを使用したレンダリング パイプライン上図では、HTML データの要求から DO...
目次序文データのシミュレーション結合されたデータ合併のアイデアコードの表示と分析最初のステップステッ...
目次要件の説明問題の説明問題分析問題解決質問の拡張要件の説明このプロジェクトでは、まずユーザーが質問...
* 住所 - 住所* blockquote - ブロック引用* center - 中央揃えブロック*...
Docker の基本的な操作を学習した後、コンテナにいくつかの基本的なアプリケーションをデプロイして...
Keepalive は Vue プロジェクトでのキャッシュによく使用され、基本的な要件を満たすのに非...
最も人気のあるフロントエンド フレームワークの 1 つとして、Vue は多くのフロントエンド開発エン...