クリーニングの実験データ:FLINKラーニング(II)

著者:chen_h
マイクロ・シグナル&QQ:862251340
マイクロチャネル公共数:coderpai


FLINKラーニング(A):このセクションでは、流れを説明

クリーニングの実験データ:FLINKラーニング(II)


データ準備

まず、次のアドレスをダウンロードし、必要な試験データをダウンロードする必要があります。

wget http://training.ververica.com/trainingData/nycTaxiRides.gz
wget http://training.ververica.com/trainingData/nycTaxiFares.gz

私達はちょうど解凍する必要はありません、データを取得する必要があります。

タクシー形式のデータ

私たちのタクシーデータセット(タクシーライド)、様々なニューヨーク市のタクシー旅行に関する情報が含まれています。二つの事象により、各旅行は、言った:旅は、イベントを開始し、旅の終わり。各イベントは11個のフィールドがあります。

rideId         : Long      // a unique id for each ride
taxiId         : Long      // a unique id for each taxi
driverId       : Long      // a unique id for each driver
isStart        : Boolean   // TRUE for ride start events, FALSE for ride end events
startTime      : DateTime  // the start time of a ride
endTime        : DateTime  // the end time of a ride,
                           //   "1970-01-01 00:00:00" for start events
startLon       : Float     // the longitude of the ride start location
startLat       : Float     // the latitude of the ride start location
endLon         : Float     // the longitude of the ride end location
endLat         : Float     // the latitude of the ride end location
passengerCnt   : Short     // number of passengers on the ride

注:無効または欠落したデータセットに含まれるレコード情報(緯度と経度、0.0)座標。

付属タクシー料金(タクシー運賃)データの関連データ・セットもあり、これらのフィールドが含まれます:

rideId         : Long      // a unique id for each ride
taxiId         : Long      // a unique id for each taxi
driverId       : Long      // a unique id for each driver
startTime      : DateTime  // the start time of a ride
paymentType    : String    // CSH or CRD
tip            : Float     // tip for this ride
tolls          : Float     // tolls for this ride
totalFare      : Float     // total fare collected

プログラムで、タクシーでのデータストリームを生成FLINK

注:これらの演習は、これらのタクシー・データ・ストリームを使用するコードを提供しています。

私たちは、FLINKソース機能(TaxiRideSource)を提供し、機能はタクシーのレコードと問題タクシーライドイベント・ストリームと.gzというファイルを読み込みます。ソース関数は、イベントの時間を実行しています。TaxiFareイベントは、同様のソース関数(TaxiFareSource)を有しています。

変更ExerciseBaseファイル

あなたのIDEでのデータセット、オープンcom.ververica.flinktraining.exercises.datastream_java.utils.ExerciseBaseクラスをダウンロードしたら、その後、次の2行にポイントへの2台のタクシーのデータファイルを編集するには、ダウンロードしました:

pathToRideData = "YOUR DATA PATH";
pathToFareData = "YOUR DATA PATH";

実験的な要件

運動の「タクシーに乗るのデータクレンジング」タスクは、タクシーライドイベントストリームをクリーンアップするイベントの開始や終了を削除することにより、ニューヨークではありません。

GeoUtilsユーティリティクラスは、ニューヨークエリアに位置するかどうかを確認するために、静的メソッドisInNYC(フロートLON、フロートLAT)を提供します。

それはこれに沸きます:

  1. スクリーニングおよびニューヨークのすべてのタクシーデータの発信を終了します。
  2. ニューヨークのかどうかを判断するために提供していGeoUtils。
  3. 非常に単純なフィルタ

データ入力:

// get an ExecutionEnvironment
StreamExecutionEnvironment env =
  StreamExecutionEnvironment.getExecutionEnvironment();
// configure event-time processing
env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime);

// get the taxi ride data stream
DataStream<TaxiRide> rides = env.addSource(
  new TaxiRideSource("/Users/XXX/Resources/2018/trainingData/nycTaxiRides.gz", maxDelay, servingSpeed));

データ出力

ニューヨークの開始点は、コンソールに期待される出力データではありません。

完全なコード:

package com.dataartisans.flinktraining.exercises.datastream_java.basics;

import com.dataartisans.flinktraining.exercises.datastream_java.datatypes.TaxiRide;
import com.dataartisans.flinktraining.exercises.datastream_java.sources.TaxiRideSource;
import com.dataartisans.flinktraining.exercises.datastream_java.utils.ExerciseBase;
import com.dataartisans.flinktraining.exercises.datastream_java.utils.GeoUtils;
import org.apache.flink.api.common.functions.FilterFunction;
import org.apache.flink.api.java.utils.ParameterTool;
import org.apache.flink.streaming.api.TimeCharacteristic;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;

/**
 * The "Ride Cleansing" exercise from the Flink training
 * (http://training.data-artisans.com).
 * The task of the exercise is to filter a data stream of taxi ride records to keep only rides that
 * start and end within New York City. The resulting stream should be printed.
 * <p>
 * Parameters:
 * -input path-to-input-file
 */
public class RideCleansingExercise extends ExerciseBase {
    public static void main(String[] args) throws Exception {

        ParameterTool params = ParameterTool.fromArgs(args);
        final String input = params.get("input", ExerciseBase.pathToRideData);

        final int maxEventDelay = 60;       // events are out of order by max 60 seconds
        final int servingSpeedFactor = 600; // events of 10 minutes are served in 1 second

        // set up streaming execution environment
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime);
        env.setParallelism(ExerciseBase.parallelism);

        // start the data generator
        DataStream<TaxiRide> rides = env.addSource(rideSourceOrTest(new TaxiRideSource(input, maxEventDelay, servingSpeedFactor)));

        DataStream<TaxiRide> filteredRides = rides
                // filter out rides that do not start or stop in NYC
                .filter(new NYCFilter());

        // print the filtered stream
        printOrTest(filteredRides);

        // run the cleansing pipeline
        env.execute("Taxi Ride Cleansing");
    }

    private static class NYCFilter implements FilterFunction<TaxiRide> {

        @Override
        public boolean filter(TaxiRide taxiRide) throws Exception {
            // 起点和终点都在纽约
            return GeoUtils.isInNYC(taxiRide.startLon, taxiRide.startLat) && GeoUtils.isInNYC(taxiRide.endLon, taxiRide.endLat);
        }
    }

}

私達はちょうどプログラムのフィルタ機能を変更しました:

private static class NYCFilter implements FilterFunction<TaxiRide> {

        @Override
        public boolean filter(TaxiRide taxiRide) throws Exception {
            // 起点和终点都在纽约
            return GeoUtils.isInNYC(taxiRide.startLon, taxiRide.startLat) && GeoUtils.isInNYC(taxiRide.endLon, taxiRide.endLat);
        }
    }
公開された414元の記事 ウォンの賞賛168 ビュー470 000 +

おすすめ

転載: blog.csdn.net/CoderPai/article/details/104898891