在訓練ML模型前,最重要的事就是前處理和特徵建構,特徵建構是在現有的特徵上,轉變萃取出更有用的資訊,例如下面圖示:
而在前處理常需要做的事包括有:
在這裡我們要開始介紹前處理和特徵建構時使用的工具:Apache Beam 和 Cloud Dataflow。
介紹 Cloud Dataflow 之前,我們要先講講什麼是數據管道 (data pipeline),所謂的數據管道是將資料經由一連串的轉化、變形後變成另一種資料,而 Cloud Dataflow 是一個平台可以運行這類型的資料處理管道,讓資料變形。
Dataflow 是使用開源的函式庫 Apache Beam,所以在建構資料處理管道的時候,你可以使用 Apache Beam APIs,這也讓你在撰寫資料管道的時候更直覺,因為它設計的方式就和一般人認為資料處理管道的方式類似。
另一個使用 Apache Beam 的優點是其支持使用相同的管道程式碼來做批次和串流資料處理,這也是 Beam 這個字的由來 Batch+Stream,所以當你處理批次或串流資料時,可以使用相同的管道處理邏輯,只需要改變輸入和輸出的資料就可以了
Apache Beam 有許多不同種類的連接器 (connetors),可以幫助結合不同的服務,也因為它是開源的,若你想要也可以自己設計一個連接器,下面是一個資料管道的例子,其中包含了許多變形的步驟,每個變形作用在一種資料結構稱為 PCollection,每個變形會以一個 PCollection 作為輸入,並輸出另一個 PCollection,而最後一個變形將會走到 sink。
所以該如何實作這些管道呢?下面是一個例子, beam.pipeline
創造了一個 pipeline instance,當其被宣告後,每個變形會以一個管道應用方式的參數所實現,此外,每個 pipeline operator 並不會運行管道,而當你需要運行資料處理的時候,就使用 run()
。
連接器有許多種類,如 Cloud storage、pub/sub、BigQuery 等等,下圖是其中幾個例子:
最後是運行資料管道的方式,下面包含了本機端的方式,還有傳送job 至 GCP Dataflow 的方式。
在這個實作中,我們將學會:
git clone https://github.com/GoogleCloudPlatform/training-data-analyst
cd training-data-analyst/courses/data_analysis/lab2/python
sudo ./install_packages.sh
pip -V
python grep.py
cat /tmp/output-*
接著我們在 GCP 上執行 pipeline,在執行之前先在 GCP 上創建 bucket 存放檔案,如果忘記創建的步驟可以參考 Day5 的文章。
複製 Java 檔案到雲端 (<YOUR-BUCKET-NAME> 填入 bucket 的名字):
gsutil cp ../javahelp/src/main/java/com/google/cloud/training/dataanalyst/javahelp/*.java gs://<YOUR-BUCKET-NAME>/javahelp
python grepc.py
gsutil cat gs://<YOUR-BUCKET-NAME>/javahelp/output-*
今天介紹了Cloud Dataflow,明天我們將講到 “規模化Data Pipeline”。