Más contenido relacionado
La actualidad más candente (20)
Similar a PySpark Intro Part.2 with SQL Graph (20)
Más de Oshitari_kochi (20)
PySpark Intro Part.2 with SQL Graph
- 2. 情シス部⾨で SQL Server や
SharePoint をメインで担当。
Japan Azure Cosmos DB User
Group Organizer
⾼知県出⾝
社会⼈6年⽬ (28歳)
※明⽇ 1/24 が誕⽣⽇ (笑)
Yuji Masaoka
まっぴぃ
#JSSUG
- 3. 04
03
02
01
Agenda
前回の振り返り
Azure Synapse Analytics で PySpark をはじめる⽅法 etc.
PySpark でのワークフロー実⾏にあたって押さえておきたいグラフデータにつ
いて解説 (SQL Server にあるグラフデータベースも少し解説)
ワークフローとグラフ
Python でどうやって SQL Server / SQL Database に接続するか
PySpark で DB に接続
Apache Airflow で PySpark (Python) の処理をジョブ化
PySpark の処理を⾃動化
#JSSUG
- 5. 前回やったこと
• PySpark とは︖
• Spark を実⾏するための Python API
• Python プログラミングで Spark を利⽤できる
• Apache Spark とは︖
• ビックデータなど、⼤きいデータに対して、⾼速に、インメモリで、分散処理を⾏うことができる OSS のフレーム
ワーク
• Azure Synapse Analytics や Azure Databricks などにも⼊っている
• PySpark を使⽤したデータ処理⼊⾨
• Dataframe
• 選択、フィルタリング、条件指定、集合、結合
• 配列、ユーザー定義関数、ピボット、ウインドウ関数/集計
#JSSUG
動画URL
https://youtu.be/zvON1p7TSeU
- 7. ワークフローについて考えてみる
• ⽣活の⾝の回りにあるモノは、⼤半がプロセスに従っている
• (例1) 電⾞、⾶⾏機︓⼀定の間隔で運⾏/⾶⾏
• (例2) 道路の信号機︓⼀定の間隔で変化
• ソフトウェアやテクノロジーの世界でも、⼀定のプロセスが踏まれている
• ウォーターフォール開発 (要件定義→設計→開発→テスト)
• Webアプリケーションの動作 (例えば、クライアント端末→Web→AP→DB) etc.
• プロセスという概念のレベルを下げたもの = ワークフローともいえる
• ⽬的の結果 X を得るために、Y と Z という対応を⾏う
• Webアプリケーション A を構築するために、標準的な⼿順 B を実施する
• DB にある情報を分析するために、α と β のクエリ結果を抽出し、γ に加⼯する etc.
#JSSUG
- 11. • ⾮循環グラフ︓循環がない有向グラフ
• DAG (有向無閉路グラフ)
環状グラフと⾮環状グラフ
#JSSUG
• 環状グラフ︓1 つ以上の循環がある有向グラフ
• 同じノードから始まり、同じノードで終わる
• 元のノードに戻るための別のエッジがある
• 閉路グラフ/ループグラフとも⾔われる ※重要︓後で出ます
DAG = Directed acyclic graph
- 14. SQL Graph
• SQL Server では、SQL Server 2017 からグラフデータベース機能が新搭載
• 1 つのデータベースごとに 1 つのグラフが作成可能
• Transact-SQL で操作
• 多対多のリレーションシップをモデル化
#JSSUG
https://docs.microsoft.com/ja-jp/sql/relational-databases/graphs/sql-graph-overview
https://docs.microsoft.com/ja-jp/sql/relational-databases/graphs/sql-graph-architecture
- 16. PySpark (Python) + SQL Server
• Python ⽤の SQL Server ドライバーはいくつか存在
• pyodbc
• pymssql etc.
• Microsoft 公式としては、pyodbc を推奨
• https://mkleehammer.github.io/pyodbc/
• https://github.com/mkleehammer/pyodbc
• https://pypi.org/project/pyodbc/
#JSSUG
- 19. Apache Airflow とは︖
• 社内にあったワークフロー業務(〇〇申請とかじゃないよ)を効率的に管理できるフレームワーク
• オープンソース
• Airbnb のエンジニアが開発し、2016 年に Apache の⼀部になる
• さまざまなジョブの実⾏、スケジューリング、配布、監視を⾏う
• Python プログラミングで DAG を定義して実⾏
• Airflow のジョブの全タスクは、DAG で定義
• Python 拡張機能を利⽤
• 障害が発⽣した場合に送信されるメール、開始/終了時刻、リトライ回数などの設定も定義
• 演算⼦
• DAG で定義できる複数のタスクは、互いに異なるものを設定できる
• Python/Bash/SQL/Sparkジョブ/クラウド演算⼦(S3,Azure,GCP etc.)、その他
#JSSUG
- 21. Airflow のインストール
• Debian ベースの Linux もしくは Docker
• https://airflow.apache.org/docs/apache-airflow/stable/installation.html
• Dockerでインストールしてみた話
• https://zenn.dev/ymasaoka/articles/get-started-with-apache-airflow
#JSSUG
- 22. DAG の作成
• DAG ファイル
• DAG を実⾏するために必要なすべての構成パラメータを含んだ、Python スクリプト
• DAG
• Python 拡張機能を利⽤
• 障害が発⽣した場合に送信されるメール、開始/終了時刻、リトライ回数などの設定も定義
• ファイル内に定義する内容は⼤きく分けて5つ
• 必要なモジュールのインポート
• デフォルト引数の宣⾔
• DAG オブジェクトのインスタンス化
• 1 つの DAG 内で⾏うすべてのタスクを定義
• 実⾏/タスクの依存関係の順序を宣⾔
#JSSUG
- 23. Airflow で SQL Server に接続
• PyPI からライブラリをインストール
• apache-airflow-providers-odbc
• apache-airflow-providers-microsoft-mssql
• DAG定義ファイル内でライブラリを呼び出し
• airflow.providers.microsoft.mssql.hooks.mssql.MsSqlHook
• SQL Server と対話 (コネクション⽣成)
• airflow.providers.microsoft.mssql.operators.mssql.MsSqlOperator
• SQL Server で SQL を実⾏
• Docker で Airflow+pyodbc やるのは少し⾯倒
• root 権限がないとインストールが失敗してしまう (たぶんDebian直接なら簡単、Dockerfileと格闘中)
• そうか、Azure Databricks の登場︖
- 26. まとめ
• ワークフローとグラフデータは似ている
• DAG (有向無閉路グラフ)
• SQL Server 2017 から SQL Server にもグラフデータベース機能が登場 (SQL Graph)
• PySpark (Python) で SQL Server に接続
• いくつかドライバーが提供されている
• Microsoft 公式としては、pyodbc を推奨
• Apache Airflow で PySpark 処理はワークフロー化できる
• Python 拡張機能である DAG 定義ファイルを使って、ジョブワークフローを定義
• タスクの依存関係をコードで定義できる
• さまざまな種類の演算⼦が使⽤可能
#JSSUG
- 27. 参考書籍・参考情報
• Learn PySpark@Apress
• https://www.apress.com/gp/book/9781484249604
• Microsoft Docs
• Python SQL ドライバー – pyodbc
• SQL テーブルから Python Pandas データフレームにデータを挿⼊する
• SQL Server と Azure SQL Database でのグラフ処理
• GitHub
• ymasaoka/Presentation-materials
#JSSUG