このプロジェクトは、以下のトピックの内容を例示するためのサンプルノートブック群です。
- エアコンからECHONET Liteプロトコルでデータを取得する
- 取得したデータをApache Kafkaクラスタに送信する
- Apache Kafkaクラスタ内のデータを読み取り、Delta Lakeに書き込む
- Delta Sharingを利用して公開されたDelta Lake内のデータを読み取る
- Apache Kafkaクラスタを構築しておいてください。
- 公式ウェブサイトのクイックスタート が参考になると思います。動作確認用にミニマム構成で1台のノードで疑似的なクラスタ構築してもよいです。
- 当レポジトリをクローン or ダウンロードしておいてください。
- Python環境を構築しておいてください。
- レポジトリに
requirements.txt
を含めてあるので、$ pip install -r requirements.txt
で必要なライブラリをインストールできます。 - 必要に応じてpyenv、venv等で環境構成しておくとよいでしょう。手元ではPython 3.7.10 on CentOSで動作確認しました。よくある注意点としては、Pythonをビルドする際にlibffi-devel、libffi-develあたりを予めインストールしておいてくださいませ。
- レポジトリに
- Delta Sharingは現在AWS S3、Azure Blob Storage等に対応しています。手元ではAWS S3、MinIO(S3プロトコルに対応したオブジェクトストレージ)で動作確認しましたが、必要に応じて、Delta Sharingからアクセス可能にしておいてください。
- 具体的には、S3にアクセスするための環境変数の設定等をJupyterノートブックを起動するプロセス上で設定しておく必要があります。
- もしS3を利用せず、MinIOを利用する場合は、 dobachi/DeltaSharingMinioExample あたりが参考になります。
- 最近のエアコンはデフォルトでWiFi接続しECHONET Liteでアクセス可能なものもありますが、既存のエアコンだとWiFiモジュールをくっつけたりする必要があります。工事したり、新規でエアコンを購入するのは辛いこともあるため、そういう場合はエミュレータを利用すると良いです。 SonyCSL/MoekadenRoom が動作しました。
- エアコン or ダミーのエアコンからECHONET Liteプロトコルで情報を取得し、Apache Kafkaクラスタに書き込むには、 BasicExampleOfKafkaECHONETLite.ipynb を用います。
- Apache Kafkaクラスタからデータを読み取り、オブジェクトストレージ(AWS S3 or MinIO)にDelta Lakeフォーマットで書き込むには BasicExampleOfIngestDataToDeltaLake.ipynb を用います。
- Delta Sharing経由でデータを読み取り、簡単な分析をするためには BasicExampleSensorDataAnalysis.ipynb を用います。
エアコン1台からデータ取得するだけでは満足できないかもしれないので、「エアコンから取得したデータ」と「電力需給に関するデータ」についてはダミーデータを作成するための簡単なJupyterノートブックを用意してあります。 Delta Sharing経由でデータを読み込み、Apache Spark上で分析する用途などで利用ください。
作られたダミーデータを読み込みApache Kafkaに流し込むJupyterノートブックは用意していませんが、簡易に自作可能と思います。 その際に流し込むデータを作成するために役立てていただいてもよいかと思います。
- GenerateDummyPowerGridData.ipynb
data/power_grid_sample.csv
に置いた元ネタからテキトーにダミーデータを作成するサンプルです- ローカルファイルシステム、Apache HadoopのHDFS、S3等にデータを出力できます
- 元ネタは各電力会社さんより公開されている情報を元に作ると、よりリアリティがあると思います
- GenerateRandomSensorData.ipynb
- 電源状態、温度設定の情報を含むダミーデータを生成するサンプルです
- ローカルファイルシステム、Apache HadoopのHDFS、S3等にデータを出力できます
本プロジェクトには、Jupyter LabをPySparkと連携して動かすためのヘルパーシェルスクリプトを同梱しています。
スクリプト内では
- PySparkでJupyter Labを利用するよう環境変数を設定
- Kafkaクライアントを利用するようパッケージを指定
- PySparkでDelta Lake、Delta Sharing、AWS SDKを利用するようパッケージを指定
- Delta Lake利用のための設定を付与
としています。
BasicExampleOfKafkaECHONETLite.ipynb
Python上で簡単なソケットプログラミングを利用し、ECHONET Liteプロトコルを利用してエアコン(ダミーのエアコンでも良いです)から情報を取得し、 Confluent Kafka Python を用いて、PythonでApache Kafkaクラスタにデータを書き込む例です。 なお、今回は簡単な動作確認のため、電源状態と設定温度の値を読み取ることにしました。 他にも色々な情報を読み取れるので試してみてください。
PythonのApache Kafkaクライアントを利用してストリームデータを取得、そのままDelta Lakeフォーマットでデータレイクに書き込む例です。 今回は簡単な動作確認なので、特に加工せずに書き込むことにしましたが、多くのケースでは各種変換(フォーマット変換、数値変換、ID変換など)が必要です。
BasicExampleSensorDataAnalysis.ipynb
予め起動しておいたDelta Sharingサーバを通じ、データレイク上に置かれたデータを読み取り、PySparkで分析する例。
GenerateDummyPowerGridData.ipynb
元ネタとして、電力会社の提供するでんき予報のようなデータを利用し、1分ごとのそれっぽいランダム値のダミーデータを生成するノートブックです。 Delta LakeやDelta Sharingを利用してデータ分析ライクなことを試す際、データ量が少ないとさみしいので水増しのために利用するものです。
GenerateRandomSensorData.ipynb
ECHONET Lite等を利用し、エアコンから電源状態、温度設定の情報を取得し、テキトーなデバイスIDっぽいものを付与したようなダミーデータを生成するノートブックです。 Delta LakeやDelta Sharingを利用してデータ分析ライクなことを試す際、データ量が少ないとさみしいので水増しのために利用するものです。
BasicExampleOfKafkaECHONETLite.ipynb で用いている、Confluent Kafka Python を用いて、PythonでApache Kafkaクラスタにデータを書き込む例を紹介する例です。
BasicExampleOfStreamFromDeltaSharing.ipynb
Delta Sharingは2021/10現在、ストリームデータの読み出しに対応してない。 それを確かめる簡単な例。
Delta Sharingサーバが起動している前提で、そこにアクセスする簡単な例。