SlideShare a Scribd company logo
1 of 56
Download to read offline
© 2017 IBM Corporation
Db2 Warehouse Spark利⽤ガイド
データ操作編
IBMシステムズ・エンジニアリング
2017/10/11
© 2017 IBM Corporation2
⽬次
§ Db2 WarehouseとSpark
§ Db2 WarehouseでのSpark処理環境の構築
§ Db2 WarehouseとSparkによるデータの処理
© 2017 IBM Corporation3
Db2 Warehouseとは
オンプレミス/プライベート・クラウド パブリック・クラウド
• コアとなるデータベー
ス・ソフトウェア
• さまざまな要件、構成
に対応可能
• お客様が⾃由に管理
• アナリティクス向けの
ソリューション
• お客様のインフラにデ
プロイして利⽤
• Dockerによって迅速
かつ簡単に利⽤開始
• お客様が⾃由に管理
• Sparkによるデータ
処理環境が統合された
• フルマネージドのト
ランザクション向け
DBサービス
• ⼩規模構成の仮想マ
シンか⼤規模構成の
物理マシンが⽤意さ
れる
• フルマネージドのア
ナリティクス向けDB
サービス
• SMPとMPP
• SoftLayer/AWSで利
⽤可能
Db2
Db2
Warehouse
Db2
on Cloud
Db2
Warehouse
on Cloud
このガイドの対象
Db2 Warehouseとは、アナリティクス環境を迅速かつ簡単に構築することにフォーカスした
Db2の新しいソリューション。オンプレミスやプライベートクラウド、任意のIaaS上で稼働
できる。
© 2017 IBM Corporation4
dashDB LocalコンテナdashDB Localコンテナ
Analytics
EngineRelational Engine
CSV,Twitter, 地理データ
オープン・データ
BI/分析アプリケーション
(SPSS/Cognos)
Webコンソール
SQLインターフェイス
Cloudant
(蓄積)
構造化データ
スケーラブルクラスタファイルシステム
Watson IoT/Kafka
(収集、抽出)
共有メモリによる⾼速データ通信
データサイエンティスト
テキスト
ファイル
半構造化、⾮構造データ
オブジェクトストレージ
ストリームデータ
データ可視化、分析
加⼯
加⼯
Db2 Warehouse コンテナ
Db2 WarehouseとSpark
データウェアハウスにSpark分析エンジンを統合することで、半構造、⾮構造化データの
加⼯、分析処理と従来の構造化データ分析処理を単⼀プラットフォームで実現
Db2 Warehouseはコンテナ内にSparkの稼働環境を取り込んでおり、ScalaやPython、Rな
どでSparkによるデータの分散処理機能を利⽤可能
Db2 Warehouseの構築と同時にSpark環境も⾃動的に作成されるため個別に環境を構築する
必要がない
© 2017 IBM Corporation5
Db2 WarehouseでのSpark処理環境の構築
© 2017 IBM Corporation6
§ Db2 Warehouseセットアップ時のSparkオプション
§ Db2 WarehouseでSparkを利⽤する⽅法
§ Python環境の整備
§ Jupyter Notebook(対話的開発環境)の導⼊
Db2 WarehouseでのSpark処理環境の構築
© 2017 IBM Corporation7
Db2 Warehouseセットアップ時のSparkオプション
§ Db2 Warehouseコンテナの作成時(docker run実行時)に有効化/無効化を
指定する
[root@node1i:/root]# docker run -d -it --privileged=true --net=host --name=dashDB -v
/mnt/clusterfs:/mnt/bludata0 -v /mnt/clusterfs:/mnt/blumeta0 -e DISABLE_SPARK='NO' -e
TIMEZONE='Asia/Tokyo' ibmdashdb/local:latest-linux
docker run コマンドで指定できるオプションの⼀覧は以下を参照。
Configuration options for the IBM Db2 Warehouse image
https://www.ibm.com/support/knowledgecenter/SS6NHC/com.ibm.swg.im.dashdb.doc/admin/local_configuring.html#local_configuring
§ Spark用に確保されるメモリは、ホストシステムのメモリ量に依存する
System Memory Spark Application Memory
< 128GB 10%
≦ 128GB < 256GB 15%
≧ 256GB 20%
⼀度デプロイした環境であっても、コンテナー削除後にdocker run -e option=valueを実⾏することでデータを
削除せずに設定値を上書きできる。(ENABLE_ORACLE_COMPATIBILITY、TABLE_ORG を除く、ほとんどの項⽬が変
更可能)
https://www.ibm.com/support/knowledgecenter/SS6NHC/com.ibm.swg.im.dashdb.doc/admin/configuring_Local.html
初回作成時にDISABLE_SPARK
='YES'を指定しても、後で変更可
※ Sparkはデフォルトで有効化されるため、DISABLE_SPARKオプションなしでの実行も可能
© 2017 IBM Corporation8
Db2 WarehouseでSparkを利用する方法(1/3)
§ IDAX.SPARK_SUBMIT
- SQLインターフェースからCALL可能なストアード・プロシージャ
CALL IDAX.SPARK_SUBMIT(?, 'appResource=idax_examples.jar |
mainClass=com.ibm.idax.spark.examples.ReadWriteExampleKMeans')
• パラメーターをパイプ(|)区切りで指定する場合の例:
CALL IDAX.SPARK_SUBMIT(?, '{ "appResource" : "idax_examples.jar", "mainClass" :
"com.ibm.idax.spark.examples.ReadWriteExampleKMeans" }');
• パラメーターをJSON(JavaScript Object Notation)形式で指定する場合の例:
CALL IDAX.SPARK_SUBMIT(out submission_id varchar(1024)
, in parameters varchar(32672)
, in configuration varchar(32672) default null)
• シンタックス
submission_id:Sparkアプリケーションの
サブミッションID。自動的に付与される。
parameters:Sparkアプリケーションのリソース
(JAR, py, Rファイルなど)、mainクラス、引数などを
指定する。
configuration:パラメータのフォーマット
(json,pipe,auto)、モード(sync/async)、リトライ回数
などをkey=value形式で指定する。(オプショナル)
具体的な実行イメージや、実行中JOBのモニター方法などは、当資料の「チュートリアル」→「SQLによるSparkへの処理リクエスト」を参照すること。
© 2017 IBM Corporation9
Db2 WarehouseでSparkを利用する方法(2/3)
§ spark-submit.sh
- Shellスクリプトが実行可能な環境から Scala, Java, R, Pythonアプリケーションを実行・管理
>>-spark-submit.sh---------------------------------------------->
>--+-+-file_name--+-----------+--| application options |--------------------------------------------+-+------------+-+-><
| | '-arguments-' | '- --jsonout-' |
| +- --load-samples------------------------------------------------------------------------------+ |
| | .-apps--------. | |
| +- --upload-file--+-------------+--source_path--+--------------------+-------------------------+ |
| | +-defaultlibs-+ '- --user--user_name-' | |
| | '-globallibs--' | |
| | .-apps--------. | |
| +- --download-file--+-------------+--file_name--+--------------------+--+--------------------+-+ |
| | +-defaultlibs-+ '- --user--user_name-' '- --dir--target_dir-' | |
| | '-globallibs--' | |
| | .-apps--------. | |
| +- --list-files--+-------------+--+--------------------+---------------------------------------+ |
| | +-defaultlibs-+ '- --user--user_name-' | |
| | '-globallibs--' | |
| | .-apps--------. | |
| +- --delete-file--+-------------+--path--+--------------------+--------------------------------+ |
| | +-defaultlibs-+ '- --user--user_name-' | |
| | '-globallibs--' | |
| +- --cluster-status----------------------------------------------------------------------------+ |
| +- --app-status--submission_ID-----------------------------------------------------------------+ |
| +- --list-apps---------------------------------------------------------------------------------+ |
| +- --download-cluster-logs--+--------------------+---------------------------------------------+ |
| | '- --dir--target_dir-' | |
| +- --download-app-logs--+---------------+--+--------------------+------------------------------+ |
| | '-submission_ID-' '- --dir--target_dir-' | |
| '- --kill--submission_ID-----------------------------------------------------------------------' |
'-+- --display-cluster-log--+-out-+--+-master-------------+-+-----------------------------------------------------'
| '-err-' '-worker--IP_address-' |
+- --display-app-log--+-app--+--+---------------+---------+
| +-out--+ '-submission_ID-' |
| +-err--+ |
| '-info-' |
+- --webui-url--------------------------------------------+
+- --env--------------------------------------------------+
+- --version----------------------------------------------+
'- --help-------------------------------------------------'
• シンタックス
application options
|--+- --class--main_class--+------------------------+-+--------->
| | .-,---------. | |
| | V | | |
| '- --jars----file_name-+-' |
'-+----------------------------+-------------------'
| .-,---------. |
| V | |
'- --py-files----file_name-+-'
.- --name--application_id-. .- --loc--host---.
>--+-------------------------+--+----------------+-------------->
'- --name--name-----------' '- --loc--client-'
>--+---------------------------------------------+--------------|
'- --master--+-https://--dashDB_host--:8443-+-'
'-local------------------------'
ファイル操作
ログ確認
実行するアプリケーション
の情報を指定
Spark Web User Interface (UI)
の表示
ステータス確認
具体的な実行イメージや実行例は、当資料の「チュートリアル」→「RESTツールの準備」~「アプリケーションの実行」を参照すること。
処理の中止
© 2017 IBM Corporation10
Db2 WarehouseでSparkを利用する方法(3/3) ①
§ REST API
- cURLやその他のRESTクライアントツールから実行可能
GET /global List the contents of the global administrator directory
GET /global/{file_or_folder} Get the contents of a file or list the contents of a folder relative to the global administrator directory
POST /global Upload a file to the global administrator directory
POST /global/{folder} Upload a file to a folder relative to the global administrator directory
DELETE /global/{file_or_folder} Delete a file or a folder in the global administrator directory
• global : グローバル管理ディレクトリの操作(/mnt/clusterfs/global) ※管理者のみ実行可
GET /home List the contents of the home directory
GET /home/{file_or_folder} Get the contents of a file or list the contents of a folder relative to the home directory
POST /home Upload a file to the home directory
POST /home/{folder} Upload a file to a folder relative to the home directory
DELETE /home/{file_or_folder} Delete a file or a folder in the home directory
• home : ホームディレクトリの操作
[BASE URL: /dashDB-api, API VERSION:1.1.0]
GET /load/{loadID} Get information on load jobs based on loadID
GET /load/{tableName} Get information on load jobs based on tableName
POST /load/local/del/{tableName} Load local delimited data into a table
• load : データのLOAD
対象テーブル名、LOAD元ファイル名
(REST API実行クライアント上のパス名)を
実行時に指定する
üDatabase API
© 2017 IBM Corporation11
Db2 WarehouseでSparkを利用する方法(3/3) ②
POST /rscript Run a temporary R script file
POST /rscript/{filename} Run an existing R script file
• rscript : R スクリプトの実行
POST /users Create an LDAP user
• users : LDAPユーザー操作 ※管理者のみ実行可
https://developer.ibm.com/static/site-id/85/api/db2wh/#analytics
[BASE URL: /dashDB-api, API VERSION:1.1.0]
RスクリプトのBodyを実行時に指定する
POST /public/apps/cancel Cancel a Spark application
POST /public/apps/submit Submit a Spark application
• apps : Sparkアプリケーションの操作
GET /public/monitoring/app_status Check Spark applications that are currently running
• monitoring: 実行中のSparkアプリケーションのモニター
POST /public/samples/load Load the Spark samples into the user's home directory
• samples: Sparkサンプルファイルのロード
üAnalytics API
https://developer.ibm.com/static/site-id/85/api/db2wh/#/
APIコマンドの詳細は以下を参照。下記URL内の各コマンドをクリックすると、詳細説明やcRULコマンドの雛形が表示される。
注:Db2 Warehouseは、デフォルトでは自己署名証明書を使用するため、cURL実行時に証明書エラーに抵触した場合は、"-k"オプション(証明書に
関する検証エラーを許容)を指定する必要がある。
© 2017 IBM Corporation12
Python環境の整備 (1/2)
§ Pythonパッケージの導入
- 必要に応じ、pip(Pythonのパッケージ管理コマンド)をダウンロード
- ホストOSから、Db2 Warehouseのコンテナーにログインしてコマンドを実行
• Db2 Warehouseでは、全ユーザーにPythonパッケージ使用を許可する(root権限が必要)
• Db2 Warehouse docker コンテナー内でコマンドを実行する
https://www.ibm.com/support/knowledgecenter/SS6NHC/com.ibm.swg.im.dashdb.doc/learn_how/deploying_python.html
【Jupyter Notebook用】
docker exec -it dashDB bash
/usr/bin/pip install <package name>
exit
インストール手順の詳細は以下を参照。
注1:Db2 Warehouseのdockerコンテナーを再デプロイした場合には、再度、Pythonパッケージをインストールすること。
【Spark applications用】
docker exec -it dashDB bash
/usr/local/bin/pip2.7 install <package name>
exit
必要に応じ、どちらか一方、ある
いは両方実行すること
注2:MPP環境の場合、Spark Application用パッケージのインストールは全てのノードで実行すること。
© 2017 IBM Corporation13
Python環境の整備 (2/2)
§ Pythonパッケージの管理
- インストール済みのパッケージは「freeze」や「list」で確認することができる
docker exec -it dashDB bash
/usr/local/bin/pip2.7 list --format=columns # Spark Application用パッケージの確認例
/usr/bin/pip list --format=columns # Jupyter Notebook用パッケージの確認例
exit
[root@node1i:/root]# docker exec -it dashDB bash
[root@node1i - dashDB /]# /usr/bin/pip list --format=columns
Package Version
------------------- -----------
certifi 2017.7.27.1
chardet 3.0.4
cycler 0.10.0
matplotlib 2.0.2
numpy 1.13.1
...(略)...
• 出力例
インストール済パッケージ、
バージョンが表示される
© 2017 IBM Corporation14
Jupyter Notebook(対話的開発環境)の導入 (1/4)
§ Db2 Warehouseが提供するSpark Application開発用コンテナー
- Spark - Scala, Spark - Pythonの開発・実行環境として利用可能
- オープンソースのJupyterをベースにDb2 Warehouse用のDockerコンテナーが提供される
- Spark driverやexecutorはNotebookコンテナーではなくDb2 Warehouse上で稼動する
§ Jupyter Notebook とは
- 多様なプログラミング言語に対応したWebベースの対話的開発環境で、データ・サイエン
スの領域で活発に利用されている。
- ソースコードと数式、図、説明文などを一体で管理し、共有することが可能
- 作成したコードをLaTeXやJavaScript などのリッチな形式で出力できる
ホストサーバー(Linuxなど)
Db2 Warehouse コンテナー
Jupyter
Notebook
コンテナー
Db2 Warehouseコンテナーとは別に
Jupyter Notebookコンテナーを構築するSpark本体はDb2 Warehouse上(DBエンジ
ンと同じコンテナー)で実行される
© 2017 IBM Corporation15
Jupyter Notebook(対話的開発環境)の導入 (2/4)
§ Jupyter Notebook コンテナーの導入方法について
- SMPの場合はDb2 Warehouse導入先、MPPの場合はヘッドノード導入先のホストに
コンテナーを作成する
- notebookファイルをJupyter Notebookコンテナーの外部に保管するためには、
docker run -v にて jovyan (Jupyterユーザー) のホーム・ディレクトリーとDb2
Warehouseのユーザー・ホーム・ディレクトリを紐付ける
• 外部ボリュームを設定しない場合、コンテナー再起動時にnotebookファイルが初期化される
→ この文書では、bluuser1というユーザーで、外部ボリュームを利用する手順を示す。
§ Jupyter Notebook コンテナー導入手順
cd <任意のディレクトリ>
git clone https://github.com/ibmdbanalytics/dashdb_analytic_tools.git
l Jupyterから利用するDb2 Warehouseユーザーを作成済みであること(コンソール画面より "Settings"
→ "Users and Privileges" → 「+」("Add User") にて作成 )
l Git clientが導入済みであること (gitコマンドが使用可能であること)
l rootユーザーで実行する場合、umask 0022 であること ("umask"コマンド出力にて確認)
カレントディレクトリに以下のサブディレクトリが作成される
dashdb_analytic_tools/dashdblocal_notebooks
2. リポジトリのダウンロード
1. 前提
© 2017 IBM Corporation16
Jupyter Notebook(対話的開発環境)の導入 (3/4)
docker inspect dashDB | grep -B 1 'Destination.*/blumeta0'
【実行例】
[root@node1i:/root]# docker inspect dashDB | grep -B 1 'Destination.*/blumeta0'
"Source": "/mnt/clusterfs",
"Destination": "/mnt/blumeta0",
ホームディレクトリは「/mnt/clusterfs」を
使用していることが分かる
3. ホーム・ディレクトリのマウント位置を確認
4. Db2 Warehouseコンテナー内のユーザーID(UID)を確認
docker exec -t dashDB /usr/bin/id -u bluuser1
【実行例】
[root@node1i:/root]# docker exec -t dashDB /usr/bin/id -u bluuser1
5003 bluuser1のUIDは5003番である
ことが分かる
5. Jupyter Notbookコンテナーをフォアグラウンドで始動する
(初回は"-it --rm"(フォアグラウンド起動)が推奨される。Ctrl+Cなどで停止可能)
docker run -v /mnt/clusterfs/home/bluuser1/work:/home/jovyan/work -e NB_UID=5003 --user=root
-e DASHDBUSER=bluuser1 -e DASHDBPASS=<bluuser1のパスワード> -it --rm --net=host
dashdblocal_notebook bluuser1の作成時に設定した
パスワードを指定
© 2017 IBM Corporation17
Jupyter Notebook(対話的開発環境)の導入 (4/4)
https://github.com/ibmdbanalytics/dashdb_analytic_tools/tree/master/dashdblocal_notebooks
複数ユーザー対応やポートの変更、PowerPCでのデプロイ方法等、インストール手順の詳細については以下を参照。
6. Jupyter Notbookコンテナーをバックグラウンドで始動する
コマンドオプションの 「-it --rm」を「-d」に変更する
docker run -v /mnt/clusterfs/home/bluuser1/work:/home/jovyan/work -e NB_UID=5003 --user=root
-e DASHDBUSER=bluuser1 -e DASHDBPASS=<bluuser1のパスワード> -d --net=host
dashdblocal_notebook
オプションを変更
7. ブラウザー経由でJupyter Notbookコンテナーへアクセスする
http://<ホストOSのIPアドレス>:8888
注: PCクライアントからFW越しにJupyter Notebookコンテナーへアクセスする際は、必要に応じてSSHポート転送を設定すること。
(例えば、PCクライアント側で、Jupyter Notebookサーバーの"8888"ポートをPCクライアント側の"19999"ポートに転送するなど)
bluuser1の作成時に設定した
パスワードを指定
コンテナー作成時に指
定したユーザーで接続
© 2017 IBM Corporation18
Db2 WarehouseとSparkによるデータの処理
© 2017 IBM Corporation19
Db2 WarehouseとSparkによるデータの処理
§ Db2 Warehouseでのデータの分散配置
§ Db2のデータをSparkで処理する(データ読み込み)
§ Sparkで処理したデータをDb2に取り込む(データ書き込み)
§ データの並列処理
§ Db2への処理オフロード
© 2017 IBM Corporation20
Db2 Warehouseでのデータの分散配置
n RDB側のデータはdata partitionで構成され、それぞれのdata partitionが1/n
のデータを分散して保持する
n data partitionの分散数は24もしくは60(シングルサーバーでは1)
Partition 0
Partition 1
Partition 2
Partition 3
Partition 4
Partition 23
Partition 22
24のData
Partition
・
・
・
Partition 5
Partition 6
24のプロセス
Partition 21
db2sysc 0
db2sysc 1
db2sysc 5
db2sysc 4
db2sysc 3
db2sysc 2
db2sysc 6
db2sysc 21
db2sysc 22
db2sysc 23
照会に対しては
各パーティションが
1/24のデータを処理
それぞれのプロセス
がメモリーを確保
x台のサーバー
(例では4台)
db2sysc 0
db2sysc 1
db2sysc 2
db2sysc 3
db2sysc 4
db2sysc 5
db2sysc 6
.
.
db2sysc 18
.
db2sysc 21
db2sysc 22
db2sysc 23
任意の数のサーバー
に格納する
・
・
・
・
・
・
24セットの
DBファイル群
・
・
・
・
・
・
ストレージ
共有DISK上に配置
照会を発⾏
© 2017 IBM Corporation21
Db2内部で構造化データはどのように分散されるか
n テーブルごとに決める「分散キー」のハッシュ値で格納先のdata partitionが決
まる
レコード1
分散キーを取り出し
てハッシュ値を計算
a8db4f
データ投⼊時にレコードの値で
配置先が決まる
レコード2
c8cbd1
Partition 16
ハッシュ値を元に格
納先を決定
Partition 5
create table sales (
store_id bigint,
order_date timestamp,
shipping_id bigint,
shipping_method char(20),
mix_cntl int ,
mix_desc char(20) ,
mix_chr char(9) ,
mix_ints smallint ,
mix_tmstmp timestamp )
distribute by hash (store_id)
テーブルを作成するときに
分散キーを指定する
レコード3
11ed8f
Partition 3
© 2017 IBM Corporation22
データをDb2と共有ストレージのどちらに置くべきか
n Db2側で保持しても、ファイルのまま共有ファイルシステムに保持しても良い
n データの特性と⽤途によって、どちらで保持するかを決める
xxx,yyy,zzz,111
xxx,yyy,zaz,121
xxx,yyy,zaz,113
xxx,yyy,zpz,114
xxx,yyy,zyz,161
csv
{
"name": "db-server",
"chef_type": "role",
"json_class":
"Chef::Role",
"ibm": {},
}
JSON/XML
2017-08-08 15:26:51.097957: I
tensorflow/core/common_runtim
e/gpu/gpu_device.cc:961] DMA:
0
2017-08-08 15:26:51.097962: I
tensorflow/core/common_runtim
e/gpu/gpu_device.cc:971] 0: Y
2017-08-08 15:26:51.097972: I
tensorflow/core/common_
log
RDB
共有ファイルシステム
C1 C2 C3 C4 C5 C6 C7 C8C1 C2 C3 C4 C5 C6 C7 C8 C1 C2 C3 C4 C5 C6 C7 C8C1 C2 C3 C4 C5 C6 C7 C8
n ある程度データ形式が決まっている
n 全体をスキャンせずに⾼速に⼀本釣りしたい
n SQLで強⼒にサマリーしたい
n データがどんどん変わるので形式を固定
したくない
n Pythonなどで直接処理する⽅が便利
n とりあえずファイルだけ放り込んで貯め
ておきたい
© 2017 IBM Corporation23
Db2のデータをSparkで処理する
(データ読み込み)
© 2017 IBM Corporation24
Db2のデータをSparkに取り込む(1/2)
Sparkを利⽤してテーブル内の条件に合致するレコード件数をカウントする処理の流れ(Python)
# PySparkのライブラリーをインポート
from pyspark.sql import SparkSession
# インポートしたSparkSessionを利⽤して新しいセッションオブジェクトを作成
sparkSession = SparkSession.builder.getOrCreate()
# アクセスするテーブル名をスキーマ付きで定義する
table = "TUKI.SPARK_TEST_DATA"
# SparkSessionのread関数を利⽤してDataFrameを定義する(ここでは定義だけ)
df = sparkSession.read ¥
.format("com.ibm.idax.spark.idaxsource") ¥
.options(dbtable=table, sqlpredicate="ID < 10") ¥
.load()
# DataFrameの”count()”関数を利⽤して、条件に合致する件数をカウントする処理を実⾏
# (ここで実際の処理が動く)
resultCount = df.count()
# 取得した件数カウント結果を出⼒
print resultCount
formatの記述によってDb2へ
のアクセスであることを⽰す
このタイミングでDb2に下のような
SQL処理が発⾏されている
SELECT count_big(*) FROM TUKI.SPARK_TEST_DATA
WHERE (dbpartitionnum("ID") = ? selectivity
0.000000000000000001) AND (ID < 10)
実⾏する際は任意の表名に変
更する
絞り込み条件(WHEREに相
当)はoptionsに記述する
© 2017 IBM Corporation25
Db2のデータをSparkに取り込む(2/2)
対話的開発環境(Jupyter Notebook)での件数カウント処理の実⾏例
© 2017 IBM Corporation26
Spark DataFrameを利⽤したデータ処理
SELECT相当の操作を実⾏する
from pyspark.sql import SparkSession
sparkSession = SparkSession.builder.getOrCreate()
table1 = 'TUKI.SPARK_T7'
df = sparkSession.read ¥
.format("com.ibm.idax.spark.idaxsource") ¥
.options(dbtable=table1, sqlpredicate="C1 < 500") ¥
.load()
print("カウント")
print(df.count())
print("単純なSELECTで先頭20件を表⽰")
print(df.show())
print("単純なSELECTで表⽰レコード数を明⽰的に指定")
print(df.show(50))
print("カラムを指定してソート済みのレコードを取得")
resultOrderBy = df.select("ID", "C3").orderBy("C3")
print(resultOrderBy.show())
print("distinct相当の操作")
print(df.select("c2").distinct().show())
Spark DataFrameのshow()
メソッドを利⽤して
DataFrameの内容を表⽰する
前の例と同様にDataFrame
の定義までを実施
通常のPythonオブジェクトと
同様にメソッドのネスト呼び
出しが可能
ここではselectでカラムの指
定、orderByでデータのソー
トを指定している
© 2017 IBM Corporation27
DataFrameのカラム構成を取得
['C1', 'C2', 'C3', 'C4', 'C5', 'C6']
print("DataFrameのスキーマを取得")
print(df.printSchema())
DataFrameのスキーマを取得
root
|-- C1: long (nullable = true)
|-- C2: integer (nullable = true)
|-- C3: integer (nullable = true)
|-- C4: string (nullable = true)
|-- C5: timestamp (nullable = true)
|-- C6: string (nullable = true)
Spark DataFrameを利⽤したデータ処理
SELECT相当の操作を実⾏する
from pyspark.sql import SparkSession
sparkSession = SparkSession.builder.getOrCreate()
table1 = 'TUKI.SPARK_T7'
df = sparkSession.read ¥
.format("com.ibm.idax.spark.idaxsource") ¥
.options(dbtable=table1, sqlpredicate="C1 < 500") ¥
.load()
print("DataFrameのカラム構成を取得")
print(df.columns)
DataFrameを構成するから無
名が取得できる
前の例と同様にDataFrame
の定義までを実施
Db2からDataFrameに取得さ
れたスキーマ(カラム名、
データタイプ、null可否)が
取得できる
© 2017 IBM Corporation28
Inner join
+---+--------------------+-------+---+--------------------+-------+
| ID| C2| C3| ID| C2| C3|
+---+--------------------+-------+---+--------------------+-------+
| 1|t1 c2 record | 39398| 1|t2 c2 record |3789398|
| 3|t1 c2 record | 398| 3|t2 c2 record | 8|
| 2|t1 c2 record |3649398| 2|t2 c2 record | 19398|
+---+--------------------+-------+---+--------------------+-------+
Spark DataFrameを利⽤したデータ処理
JOIN相当の操作を実⾏する(1/2)
from pyspark.sql import SparkSession
sparkSession = SparkSession.builder.getOrCreate()
table1 = 'TUKI.SPARK2_T1'
table2 = 'TUKI.SPARK2_T2'
df1 = sparkSession.read.format("com.ibm.idax.spark.idaxsource") ¥
.options(dbtable=table1).load()
df2 = sparkSession.read.format("com.ibm.idax.spark.idaxsource") ¥
.options(dbtable=table2).load()
print("Inner join")
df_joined = df1.join(df2, df1["id"] == df2["id"], "inner")
df_joined.show()
この結合指定での動き
• df1を基準にdf2をjoinする
• 結合条件にはID列を利⽤する
• “inner”オプションによって内部結合
を指定したため、IDが⼀致するレ
コードだけが出⼒されている
2つの表のDataFrame
を定義する
df_joinedの定義時点ではSQLは発⾏さ
れず、show()の実⾏時点でデータが取
得される
© 2017 IBM Corporation29
Left outer join
+---+--------------------+-------+----+--------------------+-------+
| ID| C2| C3| ID| C2| C3|
+---+--------------------+-------+----+--------------------+-------+
| 4|t1 c2 record | 248|null| null| null|
| 1|t1 c2 record | 39398| 1|t2 c2 record |3789398|
| 3|t1 c2 record | 398| 3|t2 c2 record | 8|
| 2|t1 c2 record |3649398| 2|t2 c2 record | 19398|
+---+--------------------+-------+----+--------------------+-------+
Spark DataFrameを利⽤したデータ処理
JOIN相当の操作を実⾏する(2/2)
# (前ページの続き)
print("Left outer join")
df_joined = df1.join(df2, df1["id"] == df2["id"], "left_outer")
df_joined.show()
“left_outer”オプションによってdf1を
基準とした左外部結合を指定
df2に該当するレコードが存在しなくて
も、df1に存在する列が出⼒されている
print("Left outer join")
df_joined = df1.join(df2, df1["id"] == df2["id"], "left_outer")
df_joined.show()
Full outer join
+----+--------------------+-------+----+--------------------+-------+
| ID| C2| C3| ID| C2| C3|
+----+--------------------+-------+----+--------------------+-------+
|null| null| null| 5|t2 c2 record | 948|
| 4|t1 c2 record | 248|null| null| null|
| 1|t1 c2 record | 39398| 1|t2 c2 record |3789398|
| 3|t1 c2 record | 398| 3|t2 c2 record | 8|
| 2|t1 c2 record |3649398| 2|t2 c2 record | 19398|
+----+--------------------+-------+----+--------------------+-------+
“full_outer”オプションによって完全外
部結合を指定
df1/df2それぞれに対応するレコードが
存在しなくても出⼒される
© 2017 IBM Corporation30
Sparkで処理したデータをDb2に取り込む
(データ書き込み)
© 2017 IBM Corporation31
Sparkで処理したデータをDb2に取り込む(CSV編) (1/2)
ファイルを準備
[root@node1i:/mnt/clusterfs/home/bluuser1/work/nog]# cat data1.txt
100,A
200,B
Db2に表を準備
Notebookで以下のコードを実⾏(ファイルから読み取りDb2にデータを投⼊できる)
data1 = spark.read.csv("work/nog/data1.txt",mode="DROPMALFORMED",inferSchema=True)
data1.write.format("com.ibm.idax.spark.idaxsource") ¥
.options(dbtable="BLUADMIN.NOGT1") ¥
.option("allowAppend","true") ¥
.mode("append")¥
.save()
基本的な処理のポイント
①SparkのDataFrameとしてCSVファイルを読み込む
②SparkのDataFrameをそのままDb2に書き込む
通常は①と②の間にデータ加⼯を⾏う
データから⾃動でスキーマを判断する
© 2017 IBM Corporation32
Sparkで処理したデータをDb2に取り込む(CSV編) (2/2)
データが⼊ったことを確認
© 2017 IBM Corporation33
Sparkで処理したデータをDb2に取り込む(JSON編) (1/3)
ファイルを準備
[root@node1i:/mnt/clusterfs/home/bluuser1/work/nog# cat sample1.json
{"name":"hoge","age":30,"city":"tokyo"}
{"name":"huga","age":41,"city":"chiba"}
{"name":"hige","age":26,"city":"kanagawa"}
Db2に表を準備
基本的な処理のポイント
Db2への書き込みは、SparkのDataFrameからのため、
JSONのデータを読みこみ最後にDataFrameになること
を⽬指す。
© 2017 IBM Corporation34
Sparkで処理したデータをDb2に取り込む(JSON編) (2/3)
Notebookで以下のコードを実⾏(spark.read.jsonを使えば、 SparkのDataFrameとしてJSONファ
イルを読むことができる)
sj1 = spark.read.json('work/nog/sample1.json')
以下のようにDataFrameとして読みこめていることを確認できる。
基本的な処理のポイント
Notebookでファイルを読み込む場合
は、”/mnt/clusterfs/home/<user name>”配下
の相対パスを指定する
© 2017 IBM Corporation35
Sparkで処理したデータをDb2に取り込む(JSON編) (3/3)
このまま(データ加⼯なしで)Db2に⼊れる場合は、CSVのときと同様、Notebookで以下のように実⾏する。
sj1.write.format("com.ibm.idax.spark.idaxsource") ¥
.options(dbtable="BLUADMIN.NOGT2") ¥
.option("allowAppend","true") ¥
.mode("append")¥
.save()
データが⼊ったことを確認
© 2017 IBM Corporation36
アプリケーションからのSpark to Db2 の利⽤例:MLlib
ここでは以下のようなユースケースを想定する。
・数学と英語の点数で合否を決める。(単純に合計点で合否を決めない)
・合格基準は過去の8名の成績をモデルにする。
・⽒名、数学の点数、英語の点数が記録されたCSVファイルを読み込み、モデルによって合否判定を⾏
い、結果を添えてDb2の表に書き込む。
1. モデル作成
1.1 8名の成績ファイルを読み込む
training = spark.read.csv('work/nog/score.csv', header=True, inferSchema=True)
ポイント
・合否は「label」という列名で定義する。(次ページで触れ
るPipelineの仕様)
© 2017 IBM Corporation37
アプリケーションからのSpark to Db2 の利⽤例:MLlib
1.2 Pipelineを使⽤してモデルを作成
from pyspark.ml.feature import VectorAssembler
from pyspark.ml.classification import LogisticRegression
from pyspark.ml import Pipeline
# 特徴抽出
assembler = VectorAssembler(inputCols=["Math", "English"],outputCol="features")
# 学習器の設定
lr = LogisticRegression(maxIter=10)
# 特徴抽出と学習アルゴリズムのフローをPipelineとして登録
pipeline = Pipeline(stages=[assembler, lr])
# 学習を⾏ってモデルを⽣成
model = pipeline.fit(training)
ポイント
・合否判定(0 or 1)なので、ロジスティック回帰を使⽤。
・SparkではPipelineを利⽤してデータの加⼯を記述する⼿法が推奨されるのでPipelineを使⽤する
・Pipelineでは、まず特徴抽出が必要だが、今回の説明変数は、数学と英語の点数、すなわち複数の数値を特徴にするため、
VectorAssemblerを使⽤。
© 2017 IBM Corporation38
アプリケーションからのSpark to Db2 の利⽤例:MLlib
1.3 作成したモデルをテスト
test = spark.createDataFrame([
(“i”, 90,95), <- iさんはおそらく合格しそうな点数
(“j”, 70,65) <- jさんはきわどい点数
], ["id", "Math","English"])
predict = model.transform(test) <- 合否予測が計算される
predict.select(‘id’, ‘Math’, ‘English’,
‘probability’,‘prediction’).show(truncate=False) <- 合否予測から⼀部を取り出し表⽰
© 2017 IBM Corporation39
アプリケーションからのSpark to Db2 の利⽤例:MLlib
2. 作成したモデルを保存
pipeline.write().overwrite().save('work/nog/score_pipeline')
model.write().overwrite().save('work/nog/score_model')
ポイント
・Pipelineも保存が可能。
© 2017 IBM Corporation40
アプリケーションからのSpark to Db2 の利⽤例:MLlib
3. Db2に表を作成
© 2017 IBM Corporation41
アプリケーションからのSpark to Db2 の利⽤例:MLlib
4. 新しいデータで合否判定を⾏いDb2に結果を格納
4.1 データ作成
# cat new_score.csv
id,Math,English
k,40,80
l,60,40
m,55,59
n,100,10
o,20,80
p,67,59
q,40,87
r,76,56
s,20,78
t,70,55
u,34,80
© 2017 IBM Corporation42
アプリケーションからのSpark to Db2 の利⽤例:MLlib
4.2 2で保存したモデルと4.1のデータをロード
from pyspark.ml import PipelineModel
from pyspark.ml import Pipeline
pipe1 = Pipeline.load('work/nog/score_pipeline')
model1 = PipelineModel.load('work/nog/score_model')
new_score = spark.read.csv('work/nog/new_score.csv', header=True, inferSchema=True)
© 2017 IBM Corporation43
アプリケーションからのSpark to Db2 の利⽤例:MLlib
4.3 スコアリングを実施しDb2に格納
predict = model1.transform(new_score)
toDb = predict.select('id', 'Math','English','prediction')
toDb.write.format("com.ibm.idax.spark.idaxsource") ¥
.options(dbtable="BLUADMIN.NOG_EXAM") ¥
.option("allowAppend","true") ¥
.mode("append")¥
.save()
4.4 データが⼊ったことを確認
ID、数学の成績(MATH_SCORE)
と英語の成績(ENGLISH_SCORE)
に加えて、合否予測のスコアリング結果
(RESULT)がデータベースに格納され
た
model.transformでス
コアリングを実⾏
スコアリング結果から必要
な列だけを取り出し
Db2への書き込み
© 2017 IBM Corporation44
アプリケーションからのSpark to Db2 の利⽤例:MLlib
・合格者だけ取り出す
predict = model1.transform(new_score)
toDb_tmp = predict.select('id', 'Math','English','prediction’)
toDb = toDb_tmp.where(toDb_tmp.prediction == 1)
toDb.write.format("com.ibm.idax.spark.idaxsource") ¥
.options(dbtable="BLUADMIN.NOG_EXAM") ¥
.option("allowAppend","true") ¥
.mode("append")¥
.save()
toDb = toDb_tmp.where(toDb_tmp.prediction == 1).count()
・合格者の⼈数をカウント
補⾜:Db2に⼊れる前に以下のようなさまざまな前処理をsparkで実施することが可能
前ページの処理に条件抽
出処理を追加
© 2017 IBM Corporation45
データの並列処理
© 2017 IBM Corporation46
データの並列処理(DBデータの取得) (1/3)
§ Db2 Warehouse SMP環境における並列処理
- SMP環境では、Db2はMPP構成ではなくシングル構成で作成される
- そのため、Spark側でもDataFrameでデータを取得した時点では分散されていない
- repartitionメソッドを指定することで、DataFrameを明示的に分散し、並列処理させることができ
る
input = sparkSession.read.format("com.ibm.idax.spark.idxsource").
options(dbtable="SPARK_TEST_DATA").
load()
input = input.repartition(10)
§ MPP/SMPとも、Spark EngineとDB間のデータ連携はプロセス間通信を使用して高速に実行される
10パーティションで
並列処理させる場合の例
IDAXデータソース
を使用
© 2017 IBM Corporation47
Db2 Warehouse MPPクラスター
データの並列処理(DBデータの取得) (2/3)
§ Db2 Warehouse MPP環境での並列処理
- Db2 Warehouseは、複数のサーバーが連携するMPP環境では、24もしくは60のプ
ロセスで分散処理を行う構成で構築される。
- MPP構成でDBデータをSparkに取得した場合、自動的にDb2 Warehouseの各Data
partitionに対応してDataFrameが分散される (24 partitionであれば、24個の
DataFrameに分割される)
- Sparkによる分散処理を活かすため、可能な限りSpark DataFrameのまま処理を進
めることが推奨される
DBデータは分散キー
列のハッシュ値を元に
分散配置されている
パーティション数に
対応した
DataFrameが使用
される
§ MPP/SMPとも、Spark EngineとDB間のデータ連携はプロセス間通信を使用して高速に実行される
© 2017 IBM Corporation48
データの並列処理(DBデータの取得) (3/3)
from pyspark.sql import SparkSession
sparkSession = SparkSession.builder.getOrCreate()
inputData = sparkSession.read.format("com.ibm.idax.spark.idaxsource") ¥
.options(dbtable="SPARK_TEST_DATA") ¥
.load()
inputData.count()
• MPP環境でのテーブル件数カウント例
IDAXデータソース
を使用
MPP環境なので
repartition指定は不要
CountRDD:54 - Partition [Database partition 4 stored on host node1i (port 0)] is connected to DB2 member 0
CountRDD:54 - Partition [Database partition 13 stored on host node2i (port 0)] is connected to DB2 member 8
CountRDD:54 - Partition [Database partition 23 stored on host node3i (port 0)] is connected to DB2 member 16
...
MisplacedPartitionChecker:42 - retrieving data of partition [Database partition 1 stored on host node1i (port
0)] from host node1i
MisplacedPartitionChecker:42 - retrieving data of partition [Database partition 15 stored on host node2i (port
0)] from host node2i
MisplacedPartitionChecker:42 - retrieving data of partition [Database partition 22 stored on host node3i (port
0)] from host node3i
...
CountRDD:54 - Count query SELECT count_big(*) FROM BLUADMIN.SPARK_TEST_DATA WHERE (dbpartitionnum("ID") = ?
selectivity 0.000000000000000001) /* <OPTGUIDELINES><REGISTRY><OPTION NAME='DB2_SELECTIVITY'
VALUE='YES'/></REGISTRY></OPTGUIDELINES> */ returned 38 rows
CountRDD:54 - Count query SELECT count_big(*) FROM BLUADMIN.SPARK_TEST_DATA WHERE (dbpartitionnum("ID") = ?
selectivity 0.000000000000000001) /* <OPTGUIDELINES><REGISTRY><OPTION NAME='DB2_SELECTIVITY'
VALUE='YES'/></REGISTRY></OPTGUIDELINES> */ returned 46 rows
• Spark実行ログ (抜粋)
Database Partitionと実
行ノードを自動認識
各Partitionで処理を
分散実行
© 2017 IBM Corporation49
データの並列処理(CSVファイル) (1/2)
from pyspark import SparkContext
data_file = "work/Tsuji/Test01.csv"
raw_data = SparkContext.textFile(data_file)
raw_data.count()
• CSV件数カウント例
SparkContextを使用
• Spark実行ログ 自動的に13のタスクに分割
され、3ノードで実行される
入力ファイルは約400MB(2000万件)
各ノードのExecutor (並列処理の
ワーカー)がファイルへアクセス
§ 分割可能なファイルの分散処理 (自動)
- プレーンテキストやbzip2は分割可能(splittable)であり、自動的に並行処理される
© 2017 IBM Corporation50
データの並列処理(CSVファイル) (2/2)
• Spark実行ログ (続き)
13タスクで件数をカウントし、
合計値を呼び出し元に返す
各ノードで処理を分散
注: gzipファイルは分割可能ではないため、自動並列処理は行なわれない。圧縮率や実行速度を鑑み、適切な形式(圧縮/非圧縮)を選択すること。
© 2017 IBM Corporation51
Db2への処理オフロード
© 2017 IBM Corporation52
Db2への処理オフロード
from pyspark.sql import SparkSession
sparkSession = SparkSession.builder.getOrCreate()
table = "TUKI.SPARK_T7"
# SparkSessionのread関数を利⽤してDataFrameを定義する
df = sparkSession.read ¥
.format("com.ibm.idax.spark.idaxsource") ¥
.options(dbtable=table, sqlpredicate=“C1 < 10") ¥
.load()
df.count()
# Filterメソッドによる絞り込み
df.filter(df['C2'] < 50).show()
DataFrame定義時にFilter条
件を指定する例
§ SparkからDb2への処理オフロード
- Db2 Warehouseに統合されたSparkでは、フィルター処理のDb2へのオフロードが実
装されている。
- DataFrame定義時のsqlpredicateによる条件の指定や、DataFrameのfilterメソッド
利用時に有効になる
Filterメソッドによる絞り込
みも可能
© 2017 IBM Corporation53
Db2への処理オフロード
member STMT_TEXT
------ -------------------------------------------------------------------------------------------------------------------------
0 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10)
1 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10)
2 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10)
3 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10)
4 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10)
5 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10)
6 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10)
7 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10)
8 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10)
9 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10)
10 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10)
11 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10)
12 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10)
13 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10)
14 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10)
15 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10)
16 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10)
17 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10)
18 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10)
19 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10)
20 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10)
21 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10)
22 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10)
23 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10)
24のDB partitionそれぞれ
にSQLが発⾏されている
df.count()実行時のSQL
DataFrame作成時に定義し
たsqlpredicateがSQLに埋め
込まれている
© 2017 IBM Corporation54
Db2への処理オフロード
member STMT_TEXT
------ -------------------------------------------------------------------------------------------------------------------------
0 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10)
1 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10)
2 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10)
3 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10)
4 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10)
5 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10)
6 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10)
7 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10)
8 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10)
9 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10)
10 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10)
11 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10)
12 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10)
13 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10)
14 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10)
15 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10)
16 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10)
17 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10)
18 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10)
19 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10)
20 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10)
21 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10)
22 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10)
23 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10)
df.filter(df['C2'] < 50).show()実行時のSQL
DataFrame作成時に定義した
sqlpredicateとfilterメソッドによる絞り
込みが共にSQLに埋め込まれている
© 2017 IBM Corporation56
Legal Disclaimer
• © IBM Corporation 2016. All Rights Reserved.
• The information contained in this publication is provided for informational purposes only. While efforts were made to verify the completeness and accuracy of the information contained
in this publication, it is provided AS IS without warranty of any kind, express or implied. In addition, this information is based on IBM’s current product plans and strategy, which are
subject to change by IBM without notice. IBM shall not be responsible for any damages arising out of the use of, or otherwise related to, this publication or any other materials. Nothing
contained in this publication is intended to, nor shall have the effect of, creating any warranties or representations from IBM or its suppliers or licensors, or altering the terms and
conditions of the applicable license agreement governing the use of IBM software.
• References in this presentation to IBM products, programs, or services do not imply that they will be available in all countries in which IBM operates. Product release dates and/or
capabilities referenced in this presentation may change at any time at IBM’s sole discretion based on market opportunities or other factors, and are not intended to be a commitment
to future product or feature availability in any way. Nothing contained in these materials is intended to, nor shall have the effect of, stating or implying that any activities undertaken by
you will result in any specific sales, revenue growth or other results.
• If the text contains performance statistics or references to benchmarks, insert the following language; otherwise delete:
Performance is based on measurements and projections using standard IBM benchmarks in a controlled environment. The actual throughput or performance that any user will
experience will vary depending upon many factors, including considerations such as the amount of multiprogramming in the user's job stream, the I/O configuration, the storage
configuration, and the workload processed. Therefore, no assurance can be given that an individual user will achieve results similar to those stated here.
• If the text includes any customer examples, please confirm we have prior written approval from such customer and insert the following language; otherwise delete:
All customer examples described are presented as illustrations of how those customers have used IBM products and the results they may have achieved. Actual environmental costs
and performance characteristics may vary by customer.
• Please review text for proper trademark attribution of IBM products. At first use, each product name must be the full name and include appropriate trademark symbols (e.g., IBM
Lotus® Sametime® Unyte™). Subsequent references can drop “IBM” but should include the proper branding (e.g., Lotus Sametime Gateway, or WebSphere Application Server).
Please refer to http://www.ibm.com/legal/copytrade.shtml for guidance on which trademarks require the ® or ™ symbol. Do not use abbreviations for IBM product names in your
presentation. All product names must be used as adjectives rather than nouns. Please list all of the trademarks that you use in your presentation as follows; delete any not included in
your presentation. IBM, the IBM logo, Lotus, Lotus Notes, Notes, Domino, Quickr, Sametime, WebSphere, UC2, PartnerWorld and Lotusphere are trademarks of International
Business Machines Corporation in the United States, other countries, or both. Unyte is a trademark of WebDialogs, Inc., in the United States, other countries, or both.
• If you reference Adobe® in the text, please mark the first use and include the following; otherwise delete:
Adobe, the Adobe logo, PostScript, and the PostScript logo are either registered trademarks or trademarks of Adobe Systems Incorporated in the United States, and/or other
countries.
• If you reference Java™ in the text, please mark the first use and include the following; otherwise delete:
Java and all Java-based trademarks and logos are trademarks or registered trademarks of Oracle and/or its affiliates.
• If you reference Microsoft® and/or Windows® in the text, please mark the first use and include the following, as applicable; otherwise delete:
Microsoft and Windows are trademarks of Microsoft Corporation in the United States, other countries, or both.
• If you reference Intel® and/or any of the following Intel products in the text, please mark the first use and include those that you use as follows; otherwise delete:
Intel, Intel Centrino, Celeron, Intel Xeon, Intel SpeedStep, Itanium, and Pentium are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States
and other countries.
• If you reference UNIX® in the text, please mark the first use and include the following; otherwise delete:
UNIX is a registered trademark of The Open Group in the United States and other countries.
• If you reference Linux® in your presentation, please mark the first use and include the following; otherwise delete:
Linux is a registered trademark of Linus Torvalds in the United States, other countries, or both. Other company, product, or service names may be trademarks or service marks of
others.
• If the text/graphics include screenshots, no actual IBM employee names may be used (even your own), if your screenshots include fictitious company names (e.g., Renovations, Zeta
Bank, Acme) please update and insert the following; otherwise delete: All references to [insert fictitious company name] refer to a fictitious company and are used for illustration
purposes only.

More Related Content

What's hot

IBM版Hadoop - BigInsights/Big SQL (2013/07/26 CLUB DB2発表資料)
IBM版Hadoop - BigInsights/Big SQL (2013/07/26 CLUB DB2発表資料)IBM版Hadoop - BigInsights/Big SQL (2013/07/26 CLUB DB2発表資料)
IBM版Hadoop - BigInsights/Big SQL (2013/07/26 CLUB DB2発表資料)Akira Shimosako
 
Coherenceを利用するときに気をつけること #OracleCoherence
Coherenceを利用するときに気をつけること #OracleCoherenceCoherenceを利用するときに気をつけること #OracleCoherence
Coherenceを利用するときに気をつけること #OracleCoherenceToshiaki Maki
 
HDFS Supportaiblity Improvements
HDFS Supportaiblity ImprovementsHDFS Supportaiblity Improvements
HDFS Supportaiblity ImprovementsCloudera Japan
 
CentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについて
CentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについてCentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについて
CentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについてNobuyuki Sasaki
 
What's new in Couchbase Server 4.0 ja
What's new in Couchbase Server 4.0 jaWhat's new in Couchbase Server 4.0 ja
What's new in Couchbase Server 4.0 jaCouchbase Japan KK
 
[db tech showcase Tokyo 2017] E34: データベース・サービスを好きなところで動かそう Db2 Warehouse by 日...
[db tech showcase Tokyo 2017] E34: データベース・サービスを好きなところで動かそう Db2 Warehouse by 日...[db tech showcase Tokyo 2017] E34: データベース・サービスを好きなところで動かそう Db2 Warehouse by 日...
[db tech showcase Tokyo 2017] E34: データベース・サービスを好きなところで動かそう Db2 Warehouse by 日...Insight Technology, Inc.
 
Cloudera大阪セミナー 20130219
Cloudera大阪セミナー 20130219Cloudera大阪セミナー 20130219
Cloudera大阪セミナー 20130219Cloudera Japan
 
絵で見てわかる 某分散データストア
絵で見てわかる 某分散データストア絵で見てわかる 某分散データストア
絵で見てわかる 某分散データストアTakahiko Sato
 
[db tech showcase Tokyo 2015] B12:カラムストアデータベースの技術と活用法 by 日本電気株式会社 田村稔
[db tech showcase Tokyo 2015] B12:カラムストアデータベースの技術と活用法 by 日本電気株式会社 田村稔[db tech showcase Tokyo 2015] B12:カラムストアデータベースの技術と活用法 by 日本電気株式会社 田村稔
[db tech showcase Tokyo 2015] B12:カラムストアデータベースの技術と活用法 by 日本電気株式会社 田村稔Insight Technology, Inc.
 
Percona ServerをMySQL 5.6と5.7用に作るエンジニアリング(そしてMongoDBのヒント)
Percona ServerをMySQL 5.6と5.7用に作るエンジニアリング(そしてMongoDBのヒント)Percona ServerをMySQL 5.6と5.7用に作るエンジニアリング(そしてMongoDBのヒント)
Percona ServerをMySQL 5.6と5.7用に作るエンジニアリング(そしてMongoDBのヒント)Colin Charles
 
今日から使えるCouchbaseシステムアーキテクチャデザインパターン集
今日から使えるCouchbaseシステムアーキテクチャデザインパターン集今日から使えるCouchbaseシステムアーキテクチャデザインパターン集
今日から使えるCouchbaseシステムアーキテクチャデザインパターン集Couchbase Japan KK
 
[db tech showcase Tokyo 2014] L32: Apache Cassandraに注目!!(IoT, Bigdata、NoSQLのバ...
[db tech showcase Tokyo 2014] L32: Apache Cassandraに注目!!(IoT, Bigdata、NoSQLのバ...[db tech showcase Tokyo 2014] L32: Apache Cassandraに注目!!(IoT, Bigdata、NoSQLのバ...
[db tech showcase Tokyo 2014] L32: Apache Cassandraに注目!!(IoT, Bigdata、NoSQLのバ...Insight Technology, Inc.
 
なぜApache HBaseを選ぶのか? #cwt2013
なぜApache HBaseを選ぶのか? #cwt2013なぜApache HBaseを選ぶのか? #cwt2013
なぜApache HBaseを選ぶのか? #cwt2013Cloudera Japan
 
[db tech showcase Tokyo 2017] A15: レプリケーションを使用したデータ分析基盤構築のキモ(事例)by 株式会社インサイトテ...
[db tech showcase Tokyo 2017] A15: レプリケーションを使用したデータ分析基盤構築のキモ(事例)by 株式会社インサイトテ...[db tech showcase Tokyo 2017] A15: レプリケーションを使用したデータ分析基盤構築のキモ(事例)by 株式会社インサイトテ...
[db tech showcase Tokyo 2017] A15: レプリケーションを使用したデータ分析基盤構築のキモ(事例)by 株式会社インサイトテ...Insight Technology, Inc.
 
[db tech showcase Tokyo 2017] D15: ビッグデータ x 機械学習の高速分析をVerticaで実現!by ヒューレット・パッ...
[db tech showcase Tokyo 2017] D15: ビッグデータ x 機械学習の高速分析をVerticaで実現!by ヒューレット・パッ...[db tech showcase Tokyo 2017] D15: ビッグデータ x 機械学習の高速分析をVerticaで実現!by ヒューレット・パッ...
[db tech showcase Tokyo 2017] D15: ビッグデータ x 機械学習の高速分析をVerticaで実現!by ヒューレット・パッ...Insight Technology, Inc.
 
DB2をAWS上に構築する際のヒント&TIPS
DB2をAWS上に構築する際のヒント&TIPSDB2をAWS上に構築する際のヒント&TIPS
DB2をAWS上に構築する際のヒント&TIPSAkira Shimosako
 
HDFS HA セミナー #hadoop
HDFS HA セミナー #hadoopHDFS HA セミナー #hadoop
HDFS HA セミナー #hadoopCloudera Japan
 
事例から見るNoSQLの使い方 - db tech showcase Tokyo 2015 2015/06/11
事例から見るNoSQLの使い方 - db tech showcase Tokyo 2015 2015/06/11事例から見るNoSQLの使い方 - db tech showcase Tokyo 2015 2015/06/11
事例から見るNoSQLの使い方 - db tech showcase Tokyo 2015 2015/06/11MapR Technologies Japan
 
5分でわかる Apache HBase 最新版 #hcj2014
5分でわかる Apache HBase 最新版 #hcj20145分でわかる Apache HBase 最新版 #hcj2014
5分でわかる Apache HBase 最新版 #hcj2014Cloudera Japan
 

What's hot (20)

IBM版Hadoop - BigInsights/Big SQL (2013/07/26 CLUB DB2発表資料)
IBM版Hadoop - BigInsights/Big SQL (2013/07/26 CLUB DB2発表資料)IBM版Hadoop - BigInsights/Big SQL (2013/07/26 CLUB DB2発表資料)
IBM版Hadoop - BigInsights/Big SQL (2013/07/26 CLUB DB2発表資料)
 
Coherenceを利用するときに気をつけること #OracleCoherence
Coherenceを利用するときに気をつけること #OracleCoherenceCoherenceを利用するときに気をつけること #OracleCoherence
Coherenceを利用するときに気をつけること #OracleCoherence
 
HDFS Supportaiblity Improvements
HDFS Supportaiblity ImprovementsHDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
 
CentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについて
CentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについてCentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについて
CentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについて
 
Hive chapter 2
Hive chapter 2Hive chapter 2
Hive chapter 2
 
What's new in Couchbase Server 4.0 ja
What's new in Couchbase Server 4.0 jaWhat's new in Couchbase Server 4.0 ja
What's new in Couchbase Server 4.0 ja
 
[db tech showcase Tokyo 2017] E34: データベース・サービスを好きなところで動かそう Db2 Warehouse by 日...
[db tech showcase Tokyo 2017] E34: データベース・サービスを好きなところで動かそう Db2 Warehouse by 日...[db tech showcase Tokyo 2017] E34: データベース・サービスを好きなところで動かそう Db2 Warehouse by 日...
[db tech showcase Tokyo 2017] E34: データベース・サービスを好きなところで動かそう Db2 Warehouse by 日...
 
Cloudera大阪セミナー 20130219
Cloudera大阪セミナー 20130219Cloudera大阪セミナー 20130219
Cloudera大阪セミナー 20130219
 
絵で見てわかる 某分散データストア
絵で見てわかる 某分散データストア絵で見てわかる 某分散データストア
絵で見てわかる 某分散データストア
 
[db tech showcase Tokyo 2015] B12:カラムストアデータベースの技術と活用法 by 日本電気株式会社 田村稔
[db tech showcase Tokyo 2015] B12:カラムストアデータベースの技術と活用法 by 日本電気株式会社 田村稔[db tech showcase Tokyo 2015] B12:カラムストアデータベースの技術と活用法 by 日本電気株式会社 田村稔
[db tech showcase Tokyo 2015] B12:カラムストアデータベースの技術と活用法 by 日本電気株式会社 田村稔
 
Percona ServerをMySQL 5.6と5.7用に作るエンジニアリング(そしてMongoDBのヒント)
Percona ServerをMySQL 5.6と5.7用に作るエンジニアリング(そしてMongoDBのヒント)Percona ServerをMySQL 5.6と5.7用に作るエンジニアリング(そしてMongoDBのヒント)
Percona ServerをMySQL 5.6と5.7用に作るエンジニアリング(そしてMongoDBのヒント)
 
今日から使えるCouchbaseシステムアーキテクチャデザインパターン集
今日から使えるCouchbaseシステムアーキテクチャデザインパターン集今日から使えるCouchbaseシステムアーキテクチャデザインパターン集
今日から使えるCouchbaseシステムアーキテクチャデザインパターン集
 
[db tech showcase Tokyo 2014] L32: Apache Cassandraに注目!!(IoT, Bigdata、NoSQLのバ...
[db tech showcase Tokyo 2014] L32: Apache Cassandraに注目!!(IoT, Bigdata、NoSQLのバ...[db tech showcase Tokyo 2014] L32: Apache Cassandraに注目!!(IoT, Bigdata、NoSQLのバ...
[db tech showcase Tokyo 2014] L32: Apache Cassandraに注目!!(IoT, Bigdata、NoSQLのバ...
 
なぜApache HBaseを選ぶのか? #cwt2013
なぜApache HBaseを選ぶのか? #cwt2013なぜApache HBaseを選ぶのか? #cwt2013
なぜApache HBaseを選ぶのか? #cwt2013
 
[db tech showcase Tokyo 2017] A15: レプリケーションを使用したデータ分析基盤構築のキモ(事例)by 株式会社インサイトテ...
[db tech showcase Tokyo 2017] A15: レプリケーションを使用したデータ分析基盤構築のキモ(事例)by 株式会社インサイトテ...[db tech showcase Tokyo 2017] A15: レプリケーションを使用したデータ分析基盤構築のキモ(事例)by 株式会社インサイトテ...
[db tech showcase Tokyo 2017] A15: レプリケーションを使用したデータ分析基盤構築のキモ(事例)by 株式会社インサイトテ...
 
[db tech showcase Tokyo 2017] D15: ビッグデータ x 機械学習の高速分析をVerticaで実現!by ヒューレット・パッ...
[db tech showcase Tokyo 2017] D15: ビッグデータ x 機械学習の高速分析をVerticaで実現!by ヒューレット・パッ...[db tech showcase Tokyo 2017] D15: ビッグデータ x 機械学習の高速分析をVerticaで実現!by ヒューレット・パッ...
[db tech showcase Tokyo 2017] D15: ビッグデータ x 機械学習の高速分析をVerticaで実現!by ヒューレット・パッ...
 
DB2をAWS上に構築する際のヒント&TIPS
DB2をAWS上に構築する際のヒント&TIPSDB2をAWS上に構築する際のヒント&TIPS
DB2をAWS上に構築する際のヒント&TIPS
 
HDFS HA セミナー #hadoop
HDFS HA セミナー #hadoopHDFS HA セミナー #hadoop
HDFS HA セミナー #hadoop
 
事例から見るNoSQLの使い方 - db tech showcase Tokyo 2015 2015/06/11
事例から見るNoSQLの使い方 - db tech showcase Tokyo 2015 2015/06/11事例から見るNoSQLの使い方 - db tech showcase Tokyo 2015 2015/06/11
事例から見るNoSQLの使い方 - db tech showcase Tokyo 2015 2015/06/11
 
5分でわかる Apache HBase 最新版 #hcj2014
5分でわかる Apache HBase 最新版 #hcj20145分でわかる Apache HBase 最新版 #hcj2014
5分でわかる Apache HBase 最新版 #hcj2014
 

Similar to Db2 Warehouse Spark利用ガイド データ操作編

Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方linzhixing
 
MySQL clients
MySQL clientsMySQL clients
MySQL clientsyoku0825
 
20120822_dstn技術交流会_dstnのご紹介と最新技術情報
20120822_dstn技術交流会_dstnのご紹介と最新技術情報20120822_dstn技術交流会_dstnのご紹介と最新技術情報
20120822_dstn技術交流会_dstnのご紹介と最新技術情報dstn
 
Impala 2.0 Update 日本語版 #impalajp
Impala 2.0 Update 日本語版 #impalajpImpala 2.0 Update 日本語版 #impalajp
Impala 2.0 Update 日本語版 #impalajpCloudera Japan
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -onozaty
 
今さら聞けない!Active Directoryドメインサービス入門
今さら聞けない!Active Directoryドメインサービス入門今さら聞けない!Active Directoryドメインサービス入門
今さら聞けない!Active Directoryドメインサービス入門Trainocate Japan, Ltd.
 
PHP開発者のためのNoSQL入門
PHP開発者のためのNoSQL入門PHP開発者のためのNoSQL入門
PHP開発者のためのNoSQL入門じゅん なかざ
 
Web App for Containers + MySQLでコンテナ対応したPHPアプリを作ろう!
Web App for Containers + MySQLでコンテナ対応したPHPアプリを作ろう! Web App for Containers + MySQLでコンテナ対応したPHPアプリを作ろう!
Web App for Containers + MySQLでコンテナ対応したPHPアプリを作ろう! Yoichi Kawasaki
 
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...NTT DATA Technology & Innovation
 
CMS時代のバックアップノウハウを身につけよう!
CMS時代のバックアップノウハウを身につけよう!CMS時代のバックアップノウハウを身につけよう!
CMS時代のバックアップノウハウを身につけよう!Takashi Uemura
 
[中国地方DB勉強会] 第22回 Webアプリ開発をデータベース側から変革していく - MySQL 8.0新機能
[中国地方DB勉強会] 第22回 Webアプリ開発をデータベース側から変革していく - MySQL 8.0新機能[中国地方DB勉強会] 第22回 Webアプリ開発をデータベース側から変革していく - MySQL 8.0新機能
[中国地方DB勉強会] 第22回 Webアプリ開発をデータベース側から変革していく - MySQL 8.0新機能Ryusuke Kajiyama
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Masahiro Nagano
 
Azure Cosmos DB を使った高速分散アプリケーションの設計パターン
Azure Cosmos DB を使った高速分散アプリケーションの設計パターンAzure Cosmos DB を使った高速分散アプリケーションの設計パターン
Azure Cosmos DB を使った高速分散アプリケーションの設計パターンKazuyuki Miyake
 
ConsulとNomadで簡単クッキング
ConsulとNomadで簡単クッキングConsulとNomadで簡単クッキング
ConsulとNomadで簡単クッキングMasatomo Ito
 
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-靖 小田島
 
第29回 SQL Server 勉強会 (JSSUG) - Azure Synapse Analytics 概要
第29回 SQL Server 勉強会 (JSSUG) - Azure Synapse Analytics 概要 第29回 SQL Server 勉強会 (JSSUG) - Azure Synapse Analytics 概要
第29回 SQL Server 勉強会 (JSSUG) - Azure Synapse Analytics 概要 Daiyu Hatakeyama
 
シラサギハンズオン 1015 1016
シラサギハンズオン 1015 1016シラサギハンズオン 1015 1016
シラサギハンズオン 1015 1016Yu Ito
 

Similar to Db2 Warehouse Spark利用ガイド データ操作編 (20)

Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
 
MySQL clients
MySQL clientsMySQL clients
MySQL clients
 
20120822_dstn技術交流会_dstnのご紹介と最新技術情報
20120822_dstn技術交流会_dstnのご紹介と最新技術情報20120822_dstn技術交流会_dstnのご紹介と最新技術情報
20120822_dstn技術交流会_dstnのご紹介と最新技術情報
 
Impala 2.0 Update 日本語版 #impalajp
Impala 2.0 Update 日本語版 #impalajpImpala 2.0 Update 日本語版 #impalajp
Impala 2.0 Update 日本語版 #impalajp
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
 
今さら聞けない!Active Directoryドメインサービス入門
今さら聞けない!Active Directoryドメインサービス入門今さら聞けない!Active Directoryドメインサービス入門
今さら聞けない!Active Directoryドメインサービス入門
 
PHP開発者のためのNoSQL入門
PHP開発者のためのNoSQL入門PHP開発者のためのNoSQL入門
PHP開発者のためのNoSQL入門
 
Hadoopエコシステムのデータストア振り返り
Hadoopエコシステムのデータストア振り返りHadoopエコシステムのデータストア振り返り
Hadoopエコシステムのデータストア振り返り
 
Web App for Containers + MySQLでコンテナ対応したPHPアプリを作ろう!
Web App for Containers + MySQLでコンテナ対応したPHPアプリを作ろう! Web App for Containers + MySQLでコンテナ対応したPHPアプリを作ろう!
Web App for Containers + MySQLでコンテナ対応したPHPアプリを作ろう!
 
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
 
Mysql casial01
Mysql casial01Mysql casial01
Mysql casial01
 
CMS時代のバックアップノウハウを身につけよう!
CMS時代のバックアップノウハウを身につけよう!CMS時代のバックアップノウハウを身につけよう!
CMS時代のバックアップノウハウを身につけよう!
 
[中国地方DB勉強会] 第22回 Webアプリ開発をデータベース側から変革していく - MySQL 8.0新機能
[中国地方DB勉強会] 第22回 Webアプリ開発をデータベース側から変革していく - MySQL 8.0新機能[中国地方DB勉強会] 第22回 Webアプリ開発をデータベース側から変革していく - MySQL 8.0新機能
[中国地方DB勉強会] 第22回 Webアプリ開発をデータベース側から変革していく - MySQL 8.0新機能
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14
 
Azure Cosmos DB を使った高速分散アプリケーションの設計パターン
Azure Cosmos DB を使った高速分散アプリケーションの設計パターンAzure Cosmos DB を使った高速分散アプリケーションの設計パターン
Azure Cosmos DB を使った高速分散アプリケーションの設計パターン
 
ConsulとNomadで簡単クッキング
ConsulとNomadで簡単クッキングConsulとNomadで簡単クッキング
ConsulとNomadで簡単クッキング
 
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
 
第29回 SQL Server 勉強会 (JSSUG) - Azure Synapse Analytics 概要
第29回 SQL Server 勉強会 (JSSUG) - Azure Synapse Analytics 概要 第29回 SQL Server 勉強会 (JSSUG) - Azure Synapse Analytics 概要
第29回 SQL Server 勉強会 (JSSUG) - Azure Synapse Analytics 概要
 
シラサギハンズオン 1015 1016
シラサギハンズオン 1015 1016シラサギハンズオン 1015 1016
シラサギハンズオン 1015 1016
 
Vyatta 改造入門
Vyatta 改造入門Vyatta 改造入門
Vyatta 改造入門
 

More from IBM Analytics Japan

Db2 & Db2 Warehouse v11.5.4 最新情報アップデート2020年8月25日
Db2 & Db2 Warehouse v11.5.4 最新情報アップデート2020年8月25日Db2 & Db2 Warehouse v11.5.4 最新情報アップデート2020年8月25日
Db2 & Db2 Warehouse v11.5.4 最新情報アップデート2020年8月25日IBM Analytics Japan
 
Db2 Warehouse on Cloud Flex テクニカルハンドブック 2020年3月版
Db2 Warehouse on Cloud Flex テクニカルハンドブック 2020年3月版Db2 Warehouse on Cloud Flex テクニカルハンドブック 2020年3月版
Db2 Warehouse on Cloud Flex テクニカルハンドブック 2020年3月版IBM Analytics Japan
 
Db2 Warehouse on Cloud Flex ご紹介資料 2020年3月版
Db2 Warehouse on Cloud Flex ご紹介資料 2020年3月版Db2 Warehouse on Cloud Flex ご紹介資料 2020年3月版
Db2 Warehouse on Cloud Flex ご紹介資料 2020年3月版IBM Analytics Japan
 
Db2 Warehouse v3.0 運用管理ガイド 基礎編 20190104 Db2 Warehouse v3.0 Basic Operation G...
Db2 Warehouse v3.0 運用管理ガイド 基礎編 20190104  Db2 Warehouse v3.0 Basic Operation G...Db2 Warehouse v3.0 運用管理ガイド 基礎編 20190104  Db2 Warehouse v3.0 Basic Operation G...
Db2 Warehouse v3.0 運用管理ガイド 基礎編 20190104 Db2 Warehouse v3.0 Basic Operation G...IBM Analytics Japan
 
Db2 Warehouse v3.0 SMP 導入ガイド 20190104 Db2 Warehouse SMP v3.0 configration Ins...
Db2 Warehouse v3.0 SMP 導入ガイド 20190104 Db2 Warehouse SMP v3.0 configration Ins...Db2 Warehouse v3.0 SMP 導入ガイド 20190104 Db2 Warehouse SMP v3.0 configration Ins...
Db2 Warehouse v3.0 SMP 導入ガイド 20190104 Db2 Warehouse SMP v3.0 configration Ins...IBM Analytics Japan
 
【jena X IBM】ビーコンを活用した働き方改革とは?
 【jena X IBM】ビーコンを活用した働き方改革とは? 【jena X IBM】ビーコンを活用した働き方改革とは?
【jena X IBM】ビーコンを活用した働き方改革とは?IBM Analytics Japan
 
IBM Integrated Analytics System DSX R Studio 利用ガイド
IBM Integrated Analytics System DSX R Studio 利用ガイドIBM Integrated Analytics System DSX R Studio 利用ガイド
IBM Integrated Analytics System DSX R Studio 利用ガイドIBM Analytics Japan
 
IBM Integrated Analytics System Webコンソール利用ガイド 20180213
IBM Integrated Analytics System Webコンソール利用ガイド 20180213IBM Integrated Analytics System Webコンソール利用ガイド 20180213
IBM Integrated Analytics System Webコンソール利用ガイド 20180213IBM Analytics Japan
 
IBM Integrated Analytics System ユーザー利用ガイド 20180213
IBM Integrated Analytics System ユーザー利用ガイド 20180213IBM Integrated Analytics System ユーザー利用ガイド 20180213
IBM Integrated Analytics System ユーザー利用ガイド 20180213IBM Analytics Japan
 
IBM Cloud を利用したデータ分析ことはじめ
IBM Cloud を利用したデータ分析ことはじめIBM Cloud を利用したデータ分析ことはじめ
IBM Cloud を利用したデータ分析ことはじめIBM Analytics Japan
 
Db2リブランディングと製品動向 201707
Db2リブランディングと製品動向 201707Db2リブランディングと製品動向 201707
Db2リブランディングと製品動向 201707IBM Analytics Japan
 
【株式会社ラック様】ハイブリッド・クラウド時代の データベース活用 ~事例・スタートアップ・メニューご紹介~
【株式会社ラック様】ハイブリッド・クラウド時代の データベース活用 ~事例・スタートアップ・メニューご紹介~【株式会社ラック様】ハイブリッド・クラウド時代の データベース活用 ~事例・スタートアップ・メニューご紹介~
【株式会社ラック様】ハイブリッド・クラウド時代の データベース活用 ~事例・スタートアップ・メニューご紹介~IBM Analytics Japan
 
データを集めて貯めて分析する… 最先端のテクノロジーが詰まったIBMクラウドのご紹介
データを集めて貯めて分析する…  最先端のテクノロジーが詰まったIBMクラウドのご紹介データを集めて貯めて分析する…  最先端のテクノロジーが詰まったIBMクラウドのご紹介
データを集めて貯めて分析する… 最先端のテクノロジーが詰まったIBMクラウドのご紹介IBM Analytics Japan
 
中古車販売の価格予測モデル(2)
中古車販売の価格予測モデル(2)中古車販売の価格予測モデル(2)
中古車販売の価格予測モデル(2)IBM Analytics Japan
 
中古車販売の価格予測モデル(1)
中古車販売の価格予測モデル(1)中古車販売の価格予測モデル(1)
中古車販売の価格予測モデル(1)IBM Analytics Japan
 
融資業務における顧客の信用度分析
融資業務における顧客の信用度分析融資業務における顧客の信用度分析
融資業務における顧客の信用度分析IBM Analytics Japan
 
銀行の融資業務における人工知能を利用したデータマイニング活用例
銀行の融資業務における人工知能を利用したデータマイニング活用例銀行の融資業務における人工知能を利用したデータマイニング活用例
銀行の融資業務における人工知能を利用したデータマイニング活用例IBM Analytics Japan
 

More from IBM Analytics Japan (20)

Db2 & Db2 Warehouse v11.5.4 最新情報アップデート2020年8月25日
Db2 & Db2 Warehouse v11.5.4 最新情報アップデート2020年8月25日Db2 & Db2 Warehouse v11.5.4 最新情報アップデート2020年8月25日
Db2 & Db2 Warehouse v11.5.4 最新情報アップデート2020年8月25日
 
Db2 Warehouse on Cloud Flex テクニカルハンドブック 2020年3月版
Db2 Warehouse on Cloud Flex テクニカルハンドブック 2020年3月版Db2 Warehouse on Cloud Flex テクニカルハンドブック 2020年3月版
Db2 Warehouse on Cloud Flex テクニカルハンドブック 2020年3月版
 
Db2 Warehouse on Cloud Flex ご紹介資料 2020年3月版
Db2 Warehouse on Cloud Flex ご紹介資料 2020年3月版Db2 Warehouse on Cloud Flex ご紹介資料 2020年3月版
Db2 Warehouse on Cloud Flex ご紹介資料 2020年3月版
 
Db2 Warehouse v3.0 運用管理ガイド 基礎編 20190104 Db2 Warehouse v3.0 Basic Operation G...
Db2 Warehouse v3.0 運用管理ガイド 基礎編 20190104  Db2 Warehouse v3.0 Basic Operation G...Db2 Warehouse v3.0 運用管理ガイド 基礎編 20190104  Db2 Warehouse v3.0 Basic Operation G...
Db2 Warehouse v3.0 運用管理ガイド 基礎編 20190104 Db2 Warehouse v3.0 Basic Operation G...
 
Db2 Warehouse v3.0 SMP 導入ガイド 20190104 Db2 Warehouse SMP v3.0 configration Ins...
Db2 Warehouse v3.0 SMP 導入ガイド 20190104 Db2 Warehouse SMP v3.0 configration Ins...Db2 Warehouse v3.0 SMP 導入ガイド 20190104 Db2 Warehouse SMP v3.0 configration Ins...
Db2 Warehouse v3.0 SMP 導入ガイド 20190104 Db2 Warehouse SMP v3.0 configration Ins...
 
【jena X IBM】ビーコンを活用した働き方改革とは?
 【jena X IBM】ビーコンを活用した働き方改革とは? 【jena X IBM】ビーコンを活用した働き方改革とは?
【jena X IBM】ビーコンを活用した働き方改革とは?
 
IBM Integrated Analytics System DSX R Studio 利用ガイド
IBM Integrated Analytics System DSX R Studio 利用ガイドIBM Integrated Analytics System DSX R Studio 利用ガイド
IBM Integrated Analytics System DSX R Studio 利用ガイド
 
IBM Integrated Analytics System Webコンソール利用ガイド 20180213
IBM Integrated Analytics System Webコンソール利用ガイド 20180213IBM Integrated Analytics System Webコンソール利用ガイド 20180213
IBM Integrated Analytics System Webコンソール利用ガイド 20180213
 
IBM Integrated Analytics System ユーザー利用ガイド 20180213
IBM Integrated Analytics System ユーザー利用ガイド 20180213IBM Integrated Analytics System ユーザー利用ガイド 20180213
IBM Integrated Analytics System ユーザー利用ガイド 20180213
 
IBM Cloud を利用したデータ分析ことはじめ
IBM Cloud を利用したデータ分析ことはじめIBM Cloud を利用したデータ分析ことはじめ
IBM Cloud を利用したデータ分析ことはじめ
 
Db2 V11 GUIツール
Db2 V11 GUIツールDb2 V11 GUIツール
Db2 V11 GUIツール
 
Db2リブランディングと製品動向 201707
Db2リブランディングと製品動向 201707Db2リブランディングと製品動向 201707
Db2リブランディングと製品動向 201707
 
Dockerとdb2
Dockerとdb2Dockerとdb2
Dockerとdb2
 
IBM Cloudのデータベース
IBM CloudのデータベースIBM Cloudのデータベース
IBM Cloudのデータベース
 
【株式会社ラック様】ハイブリッド・クラウド時代の データベース活用 ~事例・スタートアップ・メニューご紹介~
【株式会社ラック様】ハイブリッド・クラウド時代の データベース活用 ~事例・スタートアップ・メニューご紹介~【株式会社ラック様】ハイブリッド・クラウド時代の データベース活用 ~事例・スタートアップ・メニューご紹介~
【株式会社ラック様】ハイブリッド・クラウド時代の データベース活用 ~事例・スタートアップ・メニューご紹介~
 
データを集めて貯めて分析する… 最先端のテクノロジーが詰まったIBMクラウドのご紹介
データを集めて貯めて分析する…  最先端のテクノロジーが詰まったIBMクラウドのご紹介データを集めて貯めて分析する…  最先端のテクノロジーが詰まったIBMクラウドのご紹介
データを集めて貯めて分析する… 最先端のテクノロジーが詰まったIBMクラウドのご紹介
 
中古車販売の価格予測モデル(2)
中古車販売の価格予測モデル(2)中古車販売の価格予測モデル(2)
中古車販売の価格予測モデル(2)
 
中古車販売の価格予測モデル(1)
中古車販売の価格予測モデル(1)中古車販売の価格予測モデル(1)
中古車販売の価格予測モデル(1)
 
融資業務における顧客の信用度分析
融資業務における顧客の信用度分析融資業務における顧客の信用度分析
融資業務における顧客の信用度分析
 
銀行の融資業務における人工知能を利用したデータマイニング活用例
銀行の融資業務における人工知能を利用したデータマイニング活用例銀行の融資業務における人工知能を利用したデータマイニング活用例
銀行の融資業務における人工知能を利用したデータマイニング活用例
 

Recently uploaded

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 

Recently uploaded (10)

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 

Db2 Warehouse Spark利用ガイド データ操作編

  • 1. © 2017 IBM Corporation Db2 Warehouse Spark利⽤ガイド データ操作編 IBMシステムズ・エンジニアリング 2017/10/11
  • 2. © 2017 IBM Corporation2 ⽬次 § Db2 WarehouseとSpark § Db2 WarehouseでのSpark処理環境の構築 § Db2 WarehouseとSparkによるデータの処理
  • 3. © 2017 IBM Corporation3 Db2 Warehouseとは オンプレミス/プライベート・クラウド パブリック・クラウド • コアとなるデータベー ス・ソフトウェア • さまざまな要件、構成 に対応可能 • お客様が⾃由に管理 • アナリティクス向けの ソリューション • お客様のインフラにデ プロイして利⽤ • Dockerによって迅速 かつ簡単に利⽤開始 • お客様が⾃由に管理 • Sparkによるデータ 処理環境が統合された • フルマネージドのト ランザクション向け DBサービス • ⼩規模構成の仮想マ シンか⼤規模構成の 物理マシンが⽤意さ れる • フルマネージドのア ナリティクス向けDB サービス • SMPとMPP • SoftLayer/AWSで利 ⽤可能 Db2 Db2 Warehouse Db2 on Cloud Db2 Warehouse on Cloud このガイドの対象 Db2 Warehouseとは、アナリティクス環境を迅速かつ簡単に構築することにフォーカスした Db2の新しいソリューション。オンプレミスやプライベートクラウド、任意のIaaS上で稼働 できる。
  • 4. © 2017 IBM Corporation4 dashDB LocalコンテナdashDB Localコンテナ Analytics EngineRelational Engine CSV,Twitter, 地理データ オープン・データ BI/分析アプリケーション (SPSS/Cognos) Webコンソール SQLインターフェイス Cloudant (蓄積) 構造化データ スケーラブルクラスタファイルシステム Watson IoT/Kafka (収集、抽出) 共有メモリによる⾼速データ通信 データサイエンティスト テキスト ファイル 半構造化、⾮構造データ オブジェクトストレージ ストリームデータ データ可視化、分析 加⼯ 加⼯ Db2 Warehouse コンテナ Db2 WarehouseとSpark データウェアハウスにSpark分析エンジンを統合することで、半構造、⾮構造化データの 加⼯、分析処理と従来の構造化データ分析処理を単⼀プラットフォームで実現 Db2 Warehouseはコンテナ内にSparkの稼働環境を取り込んでおり、ScalaやPython、Rな どでSparkによるデータの分散処理機能を利⽤可能 Db2 Warehouseの構築と同時にSpark環境も⾃動的に作成されるため個別に環境を構築する 必要がない
  • 5. © 2017 IBM Corporation5 Db2 WarehouseでのSpark処理環境の構築
  • 6. © 2017 IBM Corporation6 § Db2 Warehouseセットアップ時のSparkオプション § Db2 WarehouseでSparkを利⽤する⽅法 § Python環境の整備 § Jupyter Notebook(対話的開発環境)の導⼊ Db2 WarehouseでのSpark処理環境の構築
  • 7. © 2017 IBM Corporation7 Db2 Warehouseセットアップ時のSparkオプション § Db2 Warehouseコンテナの作成時(docker run実行時)に有効化/無効化を 指定する [root@node1i:/root]# docker run -d -it --privileged=true --net=host --name=dashDB -v /mnt/clusterfs:/mnt/bludata0 -v /mnt/clusterfs:/mnt/blumeta0 -e DISABLE_SPARK='NO' -e TIMEZONE='Asia/Tokyo' ibmdashdb/local:latest-linux docker run コマンドで指定できるオプションの⼀覧は以下を参照。 Configuration options for the IBM Db2 Warehouse image https://www.ibm.com/support/knowledgecenter/SS6NHC/com.ibm.swg.im.dashdb.doc/admin/local_configuring.html#local_configuring § Spark用に確保されるメモリは、ホストシステムのメモリ量に依存する System Memory Spark Application Memory < 128GB 10% ≦ 128GB < 256GB 15% ≧ 256GB 20% ⼀度デプロイした環境であっても、コンテナー削除後にdocker run -e option=valueを実⾏することでデータを 削除せずに設定値を上書きできる。(ENABLE_ORACLE_COMPATIBILITY、TABLE_ORG を除く、ほとんどの項⽬が変 更可能) https://www.ibm.com/support/knowledgecenter/SS6NHC/com.ibm.swg.im.dashdb.doc/admin/configuring_Local.html 初回作成時にDISABLE_SPARK ='YES'を指定しても、後で変更可 ※ Sparkはデフォルトで有効化されるため、DISABLE_SPARKオプションなしでの実行も可能
  • 8. © 2017 IBM Corporation8 Db2 WarehouseでSparkを利用する方法(1/3) § IDAX.SPARK_SUBMIT - SQLインターフェースからCALL可能なストアード・プロシージャ CALL IDAX.SPARK_SUBMIT(?, 'appResource=idax_examples.jar | mainClass=com.ibm.idax.spark.examples.ReadWriteExampleKMeans') • パラメーターをパイプ(|)区切りで指定する場合の例: CALL IDAX.SPARK_SUBMIT(?, '{ "appResource" : "idax_examples.jar", "mainClass" : "com.ibm.idax.spark.examples.ReadWriteExampleKMeans" }'); • パラメーターをJSON(JavaScript Object Notation)形式で指定する場合の例: CALL IDAX.SPARK_SUBMIT(out submission_id varchar(1024) , in parameters varchar(32672) , in configuration varchar(32672) default null) • シンタックス submission_id:Sparkアプリケーションの サブミッションID。自動的に付与される。 parameters:Sparkアプリケーションのリソース (JAR, py, Rファイルなど)、mainクラス、引数などを 指定する。 configuration:パラメータのフォーマット (json,pipe,auto)、モード(sync/async)、リトライ回数 などをkey=value形式で指定する。(オプショナル) 具体的な実行イメージや、実行中JOBのモニター方法などは、当資料の「チュートリアル」→「SQLによるSparkへの処理リクエスト」を参照すること。
  • 9. © 2017 IBM Corporation9 Db2 WarehouseでSparkを利用する方法(2/3) § spark-submit.sh - Shellスクリプトが実行可能な環境から Scala, Java, R, Pythonアプリケーションを実行・管理 >>-spark-submit.sh----------------------------------------------> >--+-+-file_name--+-----------+--| application options |--------------------------------------------+-+------------+-+->< | | '-arguments-' | '- --jsonout-' | | +- --load-samples------------------------------------------------------------------------------+ | | | .-apps--------. | | | +- --upload-file--+-------------+--source_path--+--------------------+-------------------------+ | | | +-defaultlibs-+ '- --user--user_name-' | | | | '-globallibs--' | | | | .-apps--------. | | | +- --download-file--+-------------+--file_name--+--------------------+--+--------------------+-+ | | | +-defaultlibs-+ '- --user--user_name-' '- --dir--target_dir-' | | | | '-globallibs--' | | | | .-apps--------. | | | +- --list-files--+-------------+--+--------------------+---------------------------------------+ | | | +-defaultlibs-+ '- --user--user_name-' | | | | '-globallibs--' | | | | .-apps--------. | | | +- --delete-file--+-------------+--path--+--------------------+--------------------------------+ | | | +-defaultlibs-+ '- --user--user_name-' | | | | '-globallibs--' | | | +- --cluster-status----------------------------------------------------------------------------+ | | +- --app-status--submission_ID-----------------------------------------------------------------+ | | +- --list-apps---------------------------------------------------------------------------------+ | | +- --download-cluster-logs--+--------------------+---------------------------------------------+ | | | '- --dir--target_dir-' | | | +- --download-app-logs--+---------------+--+--------------------+------------------------------+ | | | '-submission_ID-' '- --dir--target_dir-' | | | '- --kill--submission_ID-----------------------------------------------------------------------' | '-+- --display-cluster-log--+-out-+--+-master-------------+-+-----------------------------------------------------' | '-err-' '-worker--IP_address-' | +- --display-app-log--+-app--+--+---------------+---------+ | +-out--+ '-submission_ID-' | | +-err--+ | | '-info-' | +- --webui-url--------------------------------------------+ +- --env--------------------------------------------------+ +- --version----------------------------------------------+ '- --help-------------------------------------------------' • シンタックス application options |--+- --class--main_class--+------------------------+-+---------> | | .-,---------. | | | | V | | | | '- --jars----file_name-+-' | '-+----------------------------+-------------------' | .-,---------. | | V | | '- --py-files----file_name-+-' .- --name--application_id-. .- --loc--host---. >--+-------------------------+--+----------------+--------------> '- --name--name-----------' '- --loc--client-' >--+---------------------------------------------+--------------| '- --master--+-https://--dashDB_host--:8443-+-' '-local------------------------' ファイル操作 ログ確認 実行するアプリケーション の情報を指定 Spark Web User Interface (UI) の表示 ステータス確認 具体的な実行イメージや実行例は、当資料の「チュートリアル」→「RESTツールの準備」~「アプリケーションの実行」を参照すること。 処理の中止
  • 10. © 2017 IBM Corporation10 Db2 WarehouseでSparkを利用する方法(3/3) ① § REST API - cURLやその他のRESTクライアントツールから実行可能 GET /global List the contents of the global administrator directory GET /global/{file_or_folder} Get the contents of a file or list the contents of a folder relative to the global administrator directory POST /global Upload a file to the global administrator directory POST /global/{folder} Upload a file to a folder relative to the global administrator directory DELETE /global/{file_or_folder} Delete a file or a folder in the global administrator directory • global : グローバル管理ディレクトリの操作(/mnt/clusterfs/global) ※管理者のみ実行可 GET /home List the contents of the home directory GET /home/{file_or_folder} Get the contents of a file or list the contents of a folder relative to the home directory POST /home Upload a file to the home directory POST /home/{folder} Upload a file to a folder relative to the home directory DELETE /home/{file_or_folder} Delete a file or a folder in the home directory • home : ホームディレクトリの操作 [BASE URL: /dashDB-api, API VERSION:1.1.0] GET /load/{loadID} Get information on load jobs based on loadID GET /load/{tableName} Get information on load jobs based on tableName POST /load/local/del/{tableName} Load local delimited data into a table • load : データのLOAD 対象テーブル名、LOAD元ファイル名 (REST API実行クライアント上のパス名)を 実行時に指定する üDatabase API
  • 11. © 2017 IBM Corporation11 Db2 WarehouseでSparkを利用する方法(3/3) ② POST /rscript Run a temporary R script file POST /rscript/{filename} Run an existing R script file • rscript : R スクリプトの実行 POST /users Create an LDAP user • users : LDAPユーザー操作 ※管理者のみ実行可 https://developer.ibm.com/static/site-id/85/api/db2wh/#analytics [BASE URL: /dashDB-api, API VERSION:1.1.0] RスクリプトのBodyを実行時に指定する POST /public/apps/cancel Cancel a Spark application POST /public/apps/submit Submit a Spark application • apps : Sparkアプリケーションの操作 GET /public/monitoring/app_status Check Spark applications that are currently running • monitoring: 実行中のSparkアプリケーションのモニター POST /public/samples/load Load the Spark samples into the user's home directory • samples: Sparkサンプルファイルのロード üAnalytics API https://developer.ibm.com/static/site-id/85/api/db2wh/#/ APIコマンドの詳細は以下を参照。下記URL内の各コマンドをクリックすると、詳細説明やcRULコマンドの雛形が表示される。 注:Db2 Warehouseは、デフォルトでは自己署名証明書を使用するため、cURL実行時に証明書エラーに抵触した場合は、"-k"オプション(証明書に 関する検証エラーを許容)を指定する必要がある。
  • 12. © 2017 IBM Corporation12 Python環境の整備 (1/2) § Pythonパッケージの導入 - 必要に応じ、pip(Pythonのパッケージ管理コマンド)をダウンロード - ホストOSから、Db2 Warehouseのコンテナーにログインしてコマンドを実行 • Db2 Warehouseでは、全ユーザーにPythonパッケージ使用を許可する(root権限が必要) • Db2 Warehouse docker コンテナー内でコマンドを実行する https://www.ibm.com/support/knowledgecenter/SS6NHC/com.ibm.swg.im.dashdb.doc/learn_how/deploying_python.html 【Jupyter Notebook用】 docker exec -it dashDB bash /usr/bin/pip install <package name> exit インストール手順の詳細は以下を参照。 注1:Db2 Warehouseのdockerコンテナーを再デプロイした場合には、再度、Pythonパッケージをインストールすること。 【Spark applications用】 docker exec -it dashDB bash /usr/local/bin/pip2.7 install <package name> exit 必要に応じ、どちらか一方、ある いは両方実行すること 注2:MPP環境の場合、Spark Application用パッケージのインストールは全てのノードで実行すること。
  • 13. © 2017 IBM Corporation13 Python環境の整備 (2/2) § Pythonパッケージの管理 - インストール済みのパッケージは「freeze」や「list」で確認することができる docker exec -it dashDB bash /usr/local/bin/pip2.7 list --format=columns # Spark Application用パッケージの確認例 /usr/bin/pip list --format=columns # Jupyter Notebook用パッケージの確認例 exit [root@node1i:/root]# docker exec -it dashDB bash [root@node1i - dashDB /]# /usr/bin/pip list --format=columns Package Version ------------------- ----------- certifi 2017.7.27.1 chardet 3.0.4 cycler 0.10.0 matplotlib 2.0.2 numpy 1.13.1 ...(略)... • 出力例 インストール済パッケージ、 バージョンが表示される
  • 14. © 2017 IBM Corporation14 Jupyter Notebook(対話的開発環境)の導入 (1/4) § Db2 Warehouseが提供するSpark Application開発用コンテナー - Spark - Scala, Spark - Pythonの開発・実行環境として利用可能 - オープンソースのJupyterをベースにDb2 Warehouse用のDockerコンテナーが提供される - Spark driverやexecutorはNotebookコンテナーではなくDb2 Warehouse上で稼動する § Jupyter Notebook とは - 多様なプログラミング言語に対応したWebベースの対話的開発環境で、データ・サイエン スの領域で活発に利用されている。 - ソースコードと数式、図、説明文などを一体で管理し、共有することが可能 - 作成したコードをLaTeXやJavaScript などのリッチな形式で出力できる ホストサーバー(Linuxなど) Db2 Warehouse コンテナー Jupyter Notebook コンテナー Db2 Warehouseコンテナーとは別に Jupyter Notebookコンテナーを構築するSpark本体はDb2 Warehouse上(DBエンジ ンと同じコンテナー)で実行される
  • 15. © 2017 IBM Corporation15 Jupyter Notebook(対話的開発環境)の導入 (2/4) § Jupyter Notebook コンテナーの導入方法について - SMPの場合はDb2 Warehouse導入先、MPPの場合はヘッドノード導入先のホストに コンテナーを作成する - notebookファイルをJupyter Notebookコンテナーの外部に保管するためには、 docker run -v にて jovyan (Jupyterユーザー) のホーム・ディレクトリーとDb2 Warehouseのユーザー・ホーム・ディレクトリを紐付ける • 外部ボリュームを設定しない場合、コンテナー再起動時にnotebookファイルが初期化される → この文書では、bluuser1というユーザーで、外部ボリュームを利用する手順を示す。 § Jupyter Notebook コンテナー導入手順 cd <任意のディレクトリ> git clone https://github.com/ibmdbanalytics/dashdb_analytic_tools.git l Jupyterから利用するDb2 Warehouseユーザーを作成済みであること(コンソール画面より "Settings" → "Users and Privileges" → 「+」("Add User") にて作成 ) l Git clientが導入済みであること (gitコマンドが使用可能であること) l rootユーザーで実行する場合、umask 0022 であること ("umask"コマンド出力にて確認) カレントディレクトリに以下のサブディレクトリが作成される dashdb_analytic_tools/dashdblocal_notebooks 2. リポジトリのダウンロード 1. 前提
  • 16. © 2017 IBM Corporation16 Jupyter Notebook(対話的開発環境)の導入 (3/4) docker inspect dashDB | grep -B 1 'Destination.*/blumeta0' 【実行例】 [root@node1i:/root]# docker inspect dashDB | grep -B 1 'Destination.*/blumeta0' "Source": "/mnt/clusterfs", "Destination": "/mnt/blumeta0", ホームディレクトリは「/mnt/clusterfs」を 使用していることが分かる 3. ホーム・ディレクトリのマウント位置を確認 4. Db2 Warehouseコンテナー内のユーザーID(UID)を確認 docker exec -t dashDB /usr/bin/id -u bluuser1 【実行例】 [root@node1i:/root]# docker exec -t dashDB /usr/bin/id -u bluuser1 5003 bluuser1のUIDは5003番である ことが分かる 5. Jupyter Notbookコンテナーをフォアグラウンドで始動する (初回は"-it --rm"(フォアグラウンド起動)が推奨される。Ctrl+Cなどで停止可能) docker run -v /mnt/clusterfs/home/bluuser1/work:/home/jovyan/work -e NB_UID=5003 --user=root -e DASHDBUSER=bluuser1 -e DASHDBPASS=<bluuser1のパスワード> -it --rm --net=host dashdblocal_notebook bluuser1の作成時に設定した パスワードを指定
  • 17. © 2017 IBM Corporation17 Jupyter Notebook(対話的開発環境)の導入 (4/4) https://github.com/ibmdbanalytics/dashdb_analytic_tools/tree/master/dashdblocal_notebooks 複数ユーザー対応やポートの変更、PowerPCでのデプロイ方法等、インストール手順の詳細については以下を参照。 6. Jupyter Notbookコンテナーをバックグラウンドで始動する コマンドオプションの 「-it --rm」を「-d」に変更する docker run -v /mnt/clusterfs/home/bluuser1/work:/home/jovyan/work -e NB_UID=5003 --user=root -e DASHDBUSER=bluuser1 -e DASHDBPASS=<bluuser1のパスワード> -d --net=host dashdblocal_notebook オプションを変更 7. ブラウザー経由でJupyter Notbookコンテナーへアクセスする http://<ホストOSのIPアドレス>:8888 注: PCクライアントからFW越しにJupyter Notebookコンテナーへアクセスする際は、必要に応じてSSHポート転送を設定すること。 (例えば、PCクライアント側で、Jupyter Notebookサーバーの"8888"ポートをPCクライアント側の"19999"ポートに転送するなど) bluuser1の作成時に設定した パスワードを指定 コンテナー作成時に指 定したユーザーで接続
  • 18. © 2017 IBM Corporation18 Db2 WarehouseとSparkによるデータの処理
  • 19. © 2017 IBM Corporation19 Db2 WarehouseとSparkによるデータの処理 § Db2 Warehouseでのデータの分散配置 § Db2のデータをSparkで処理する(データ読み込み) § Sparkで処理したデータをDb2に取り込む(データ書き込み) § データの並列処理 § Db2への処理オフロード
  • 20. © 2017 IBM Corporation20 Db2 Warehouseでのデータの分散配置 n RDB側のデータはdata partitionで構成され、それぞれのdata partitionが1/n のデータを分散して保持する n data partitionの分散数は24もしくは60(シングルサーバーでは1) Partition 0 Partition 1 Partition 2 Partition 3 Partition 4 Partition 23 Partition 22 24のData Partition ・ ・ ・ Partition 5 Partition 6 24のプロセス Partition 21 db2sysc 0 db2sysc 1 db2sysc 5 db2sysc 4 db2sysc 3 db2sysc 2 db2sysc 6 db2sysc 21 db2sysc 22 db2sysc 23 照会に対しては 各パーティションが 1/24のデータを処理 それぞれのプロセス がメモリーを確保 x台のサーバー (例では4台) db2sysc 0 db2sysc 1 db2sysc 2 db2sysc 3 db2sysc 4 db2sysc 5 db2sysc 6 . . db2sysc 18 . db2sysc 21 db2sysc 22 db2sysc 23 任意の数のサーバー に格納する ・ ・ ・ ・ ・ ・ 24セットの DBファイル群 ・ ・ ・ ・ ・ ・ ストレージ 共有DISK上に配置 照会を発⾏
  • 21. © 2017 IBM Corporation21 Db2内部で構造化データはどのように分散されるか n テーブルごとに決める「分散キー」のハッシュ値で格納先のdata partitionが決 まる レコード1 分散キーを取り出し てハッシュ値を計算 a8db4f データ投⼊時にレコードの値で 配置先が決まる レコード2 c8cbd1 Partition 16 ハッシュ値を元に格 納先を決定 Partition 5 create table sales ( store_id bigint, order_date timestamp, shipping_id bigint, shipping_method char(20), mix_cntl int , mix_desc char(20) , mix_chr char(9) , mix_ints smallint , mix_tmstmp timestamp ) distribute by hash (store_id) テーブルを作成するときに 分散キーを指定する レコード3 11ed8f Partition 3
  • 22. © 2017 IBM Corporation22 データをDb2と共有ストレージのどちらに置くべきか n Db2側で保持しても、ファイルのまま共有ファイルシステムに保持しても良い n データの特性と⽤途によって、どちらで保持するかを決める xxx,yyy,zzz,111 xxx,yyy,zaz,121 xxx,yyy,zaz,113 xxx,yyy,zpz,114 xxx,yyy,zyz,161 csv { "name": "db-server", "chef_type": "role", "json_class": "Chef::Role", "ibm": {}, } JSON/XML 2017-08-08 15:26:51.097957: I tensorflow/core/common_runtim e/gpu/gpu_device.cc:961] DMA: 0 2017-08-08 15:26:51.097962: I tensorflow/core/common_runtim e/gpu/gpu_device.cc:971] 0: Y 2017-08-08 15:26:51.097972: I tensorflow/core/common_ log RDB 共有ファイルシステム C1 C2 C3 C4 C5 C6 C7 C8C1 C2 C3 C4 C5 C6 C7 C8 C1 C2 C3 C4 C5 C6 C7 C8C1 C2 C3 C4 C5 C6 C7 C8 n ある程度データ形式が決まっている n 全体をスキャンせずに⾼速に⼀本釣りしたい n SQLで強⼒にサマリーしたい n データがどんどん変わるので形式を固定 したくない n Pythonなどで直接処理する⽅が便利 n とりあえずファイルだけ放り込んで貯め ておきたい
  • 23. © 2017 IBM Corporation23 Db2のデータをSparkで処理する (データ読み込み)
  • 24. © 2017 IBM Corporation24 Db2のデータをSparkに取り込む(1/2) Sparkを利⽤してテーブル内の条件に合致するレコード件数をカウントする処理の流れ(Python) # PySparkのライブラリーをインポート from pyspark.sql import SparkSession # インポートしたSparkSessionを利⽤して新しいセッションオブジェクトを作成 sparkSession = SparkSession.builder.getOrCreate() # アクセスするテーブル名をスキーマ付きで定義する table = "TUKI.SPARK_TEST_DATA" # SparkSessionのread関数を利⽤してDataFrameを定義する(ここでは定義だけ) df = sparkSession.read ¥ .format("com.ibm.idax.spark.idaxsource") ¥ .options(dbtable=table, sqlpredicate="ID < 10") ¥ .load() # DataFrameの”count()”関数を利⽤して、条件に合致する件数をカウントする処理を実⾏ # (ここで実際の処理が動く) resultCount = df.count() # 取得した件数カウント結果を出⼒ print resultCount formatの記述によってDb2へ のアクセスであることを⽰す このタイミングでDb2に下のような SQL処理が発⾏されている SELECT count_big(*) FROM TUKI.SPARK_TEST_DATA WHERE (dbpartitionnum("ID") = ? selectivity 0.000000000000000001) AND (ID < 10) 実⾏する際は任意の表名に変 更する 絞り込み条件(WHEREに相 当)はoptionsに記述する
  • 25. © 2017 IBM Corporation25 Db2のデータをSparkに取り込む(2/2) 対話的開発環境(Jupyter Notebook)での件数カウント処理の実⾏例
  • 26. © 2017 IBM Corporation26 Spark DataFrameを利⽤したデータ処理 SELECT相当の操作を実⾏する from pyspark.sql import SparkSession sparkSession = SparkSession.builder.getOrCreate() table1 = 'TUKI.SPARK_T7' df = sparkSession.read ¥ .format("com.ibm.idax.spark.idaxsource") ¥ .options(dbtable=table1, sqlpredicate="C1 < 500") ¥ .load() print("カウント") print(df.count()) print("単純なSELECTで先頭20件を表⽰") print(df.show()) print("単純なSELECTで表⽰レコード数を明⽰的に指定") print(df.show(50)) print("カラムを指定してソート済みのレコードを取得") resultOrderBy = df.select("ID", "C3").orderBy("C3") print(resultOrderBy.show()) print("distinct相当の操作") print(df.select("c2").distinct().show()) Spark DataFrameのshow() メソッドを利⽤して DataFrameの内容を表⽰する 前の例と同様にDataFrame の定義までを実施 通常のPythonオブジェクトと 同様にメソッドのネスト呼び 出しが可能 ここではselectでカラムの指 定、orderByでデータのソー トを指定している
  • 27. © 2017 IBM Corporation27 DataFrameのカラム構成を取得 ['C1', 'C2', 'C3', 'C4', 'C5', 'C6'] print("DataFrameのスキーマを取得") print(df.printSchema()) DataFrameのスキーマを取得 root |-- C1: long (nullable = true) |-- C2: integer (nullable = true) |-- C3: integer (nullable = true) |-- C4: string (nullable = true) |-- C5: timestamp (nullable = true) |-- C6: string (nullable = true) Spark DataFrameを利⽤したデータ処理 SELECT相当の操作を実⾏する from pyspark.sql import SparkSession sparkSession = SparkSession.builder.getOrCreate() table1 = 'TUKI.SPARK_T7' df = sparkSession.read ¥ .format("com.ibm.idax.spark.idaxsource") ¥ .options(dbtable=table1, sqlpredicate="C1 < 500") ¥ .load() print("DataFrameのカラム構成を取得") print(df.columns) DataFrameを構成するから無 名が取得できる 前の例と同様にDataFrame の定義までを実施 Db2からDataFrameに取得さ れたスキーマ(カラム名、 データタイプ、null可否)が 取得できる
  • 28. © 2017 IBM Corporation28 Inner join +---+--------------------+-------+---+--------------------+-------+ | ID| C2| C3| ID| C2| C3| +---+--------------------+-------+---+--------------------+-------+ | 1|t1 c2 record | 39398| 1|t2 c2 record |3789398| | 3|t1 c2 record | 398| 3|t2 c2 record | 8| | 2|t1 c2 record |3649398| 2|t2 c2 record | 19398| +---+--------------------+-------+---+--------------------+-------+ Spark DataFrameを利⽤したデータ処理 JOIN相当の操作を実⾏する(1/2) from pyspark.sql import SparkSession sparkSession = SparkSession.builder.getOrCreate() table1 = 'TUKI.SPARK2_T1' table2 = 'TUKI.SPARK2_T2' df1 = sparkSession.read.format("com.ibm.idax.spark.idaxsource") ¥ .options(dbtable=table1).load() df2 = sparkSession.read.format("com.ibm.idax.spark.idaxsource") ¥ .options(dbtable=table2).load() print("Inner join") df_joined = df1.join(df2, df1["id"] == df2["id"], "inner") df_joined.show() この結合指定での動き • df1を基準にdf2をjoinする • 結合条件にはID列を利⽤する • “inner”オプションによって内部結合 を指定したため、IDが⼀致するレ コードだけが出⼒されている 2つの表のDataFrame を定義する df_joinedの定義時点ではSQLは発⾏さ れず、show()の実⾏時点でデータが取 得される
  • 29. © 2017 IBM Corporation29 Left outer join +---+--------------------+-------+----+--------------------+-------+ | ID| C2| C3| ID| C2| C3| +---+--------------------+-------+----+--------------------+-------+ | 4|t1 c2 record | 248|null| null| null| | 1|t1 c2 record | 39398| 1|t2 c2 record |3789398| | 3|t1 c2 record | 398| 3|t2 c2 record | 8| | 2|t1 c2 record |3649398| 2|t2 c2 record | 19398| +---+--------------------+-------+----+--------------------+-------+ Spark DataFrameを利⽤したデータ処理 JOIN相当の操作を実⾏する(2/2) # (前ページの続き) print("Left outer join") df_joined = df1.join(df2, df1["id"] == df2["id"], "left_outer") df_joined.show() “left_outer”オプションによってdf1を 基準とした左外部結合を指定 df2に該当するレコードが存在しなくて も、df1に存在する列が出⼒されている print("Left outer join") df_joined = df1.join(df2, df1["id"] == df2["id"], "left_outer") df_joined.show() Full outer join +----+--------------------+-------+----+--------------------+-------+ | ID| C2| C3| ID| C2| C3| +----+--------------------+-------+----+--------------------+-------+ |null| null| null| 5|t2 c2 record | 948| | 4|t1 c2 record | 248|null| null| null| | 1|t1 c2 record | 39398| 1|t2 c2 record |3789398| | 3|t1 c2 record | 398| 3|t2 c2 record | 8| | 2|t1 c2 record |3649398| 2|t2 c2 record | 19398| +----+--------------------+-------+----+--------------------+-------+ “full_outer”オプションによって完全外 部結合を指定 df1/df2それぞれに対応するレコードが 存在しなくても出⼒される
  • 30. © 2017 IBM Corporation30 Sparkで処理したデータをDb2に取り込む (データ書き込み)
  • 31. © 2017 IBM Corporation31 Sparkで処理したデータをDb2に取り込む(CSV編) (1/2) ファイルを準備 [root@node1i:/mnt/clusterfs/home/bluuser1/work/nog]# cat data1.txt 100,A 200,B Db2に表を準備 Notebookで以下のコードを実⾏(ファイルから読み取りDb2にデータを投⼊できる) data1 = spark.read.csv("work/nog/data1.txt",mode="DROPMALFORMED",inferSchema=True) data1.write.format("com.ibm.idax.spark.idaxsource") ¥ .options(dbtable="BLUADMIN.NOGT1") ¥ .option("allowAppend","true") ¥ .mode("append")¥ .save() 基本的な処理のポイント ①SparkのDataFrameとしてCSVファイルを読み込む ②SparkのDataFrameをそのままDb2に書き込む 通常は①と②の間にデータ加⼯を⾏う データから⾃動でスキーマを判断する
  • 32. © 2017 IBM Corporation32 Sparkで処理したデータをDb2に取り込む(CSV編) (2/2) データが⼊ったことを確認
  • 33. © 2017 IBM Corporation33 Sparkで処理したデータをDb2に取り込む(JSON編) (1/3) ファイルを準備 [root@node1i:/mnt/clusterfs/home/bluuser1/work/nog# cat sample1.json {"name":"hoge","age":30,"city":"tokyo"} {"name":"huga","age":41,"city":"chiba"} {"name":"hige","age":26,"city":"kanagawa"} Db2に表を準備 基本的な処理のポイント Db2への書き込みは、SparkのDataFrameからのため、 JSONのデータを読みこみ最後にDataFrameになること を⽬指す。
  • 34. © 2017 IBM Corporation34 Sparkで処理したデータをDb2に取り込む(JSON編) (2/3) Notebookで以下のコードを実⾏(spark.read.jsonを使えば、 SparkのDataFrameとしてJSONファ イルを読むことができる) sj1 = spark.read.json('work/nog/sample1.json') 以下のようにDataFrameとして読みこめていることを確認できる。 基本的な処理のポイント Notebookでファイルを読み込む場合 は、”/mnt/clusterfs/home/<user name>”配下 の相対パスを指定する
  • 35. © 2017 IBM Corporation35 Sparkで処理したデータをDb2に取り込む(JSON編) (3/3) このまま(データ加⼯なしで)Db2に⼊れる場合は、CSVのときと同様、Notebookで以下のように実⾏する。 sj1.write.format("com.ibm.idax.spark.idaxsource") ¥ .options(dbtable="BLUADMIN.NOGT2") ¥ .option("allowAppend","true") ¥ .mode("append")¥ .save() データが⼊ったことを確認
  • 36. © 2017 IBM Corporation36 アプリケーションからのSpark to Db2 の利⽤例:MLlib ここでは以下のようなユースケースを想定する。 ・数学と英語の点数で合否を決める。(単純に合計点で合否を決めない) ・合格基準は過去の8名の成績をモデルにする。 ・⽒名、数学の点数、英語の点数が記録されたCSVファイルを読み込み、モデルによって合否判定を⾏ い、結果を添えてDb2の表に書き込む。 1. モデル作成 1.1 8名の成績ファイルを読み込む training = spark.read.csv('work/nog/score.csv', header=True, inferSchema=True) ポイント ・合否は「label」という列名で定義する。(次ページで触れ るPipelineの仕様)
  • 37. © 2017 IBM Corporation37 アプリケーションからのSpark to Db2 の利⽤例:MLlib 1.2 Pipelineを使⽤してモデルを作成 from pyspark.ml.feature import VectorAssembler from pyspark.ml.classification import LogisticRegression from pyspark.ml import Pipeline # 特徴抽出 assembler = VectorAssembler(inputCols=["Math", "English"],outputCol="features") # 学習器の設定 lr = LogisticRegression(maxIter=10) # 特徴抽出と学習アルゴリズムのフローをPipelineとして登録 pipeline = Pipeline(stages=[assembler, lr]) # 学習を⾏ってモデルを⽣成 model = pipeline.fit(training) ポイント ・合否判定(0 or 1)なので、ロジスティック回帰を使⽤。 ・SparkではPipelineを利⽤してデータの加⼯を記述する⼿法が推奨されるのでPipelineを使⽤する ・Pipelineでは、まず特徴抽出が必要だが、今回の説明変数は、数学と英語の点数、すなわち複数の数値を特徴にするため、 VectorAssemblerを使⽤。
  • 38. © 2017 IBM Corporation38 アプリケーションからのSpark to Db2 の利⽤例:MLlib 1.3 作成したモデルをテスト test = spark.createDataFrame([ (“i”, 90,95), <- iさんはおそらく合格しそうな点数 (“j”, 70,65) <- jさんはきわどい点数 ], ["id", "Math","English"]) predict = model.transform(test) <- 合否予測が計算される predict.select(‘id’, ‘Math’, ‘English’, ‘probability’,‘prediction’).show(truncate=False) <- 合否予測から⼀部を取り出し表⽰
  • 39. © 2017 IBM Corporation39 アプリケーションからのSpark to Db2 の利⽤例:MLlib 2. 作成したモデルを保存 pipeline.write().overwrite().save('work/nog/score_pipeline') model.write().overwrite().save('work/nog/score_model') ポイント ・Pipelineも保存が可能。
  • 40. © 2017 IBM Corporation40 アプリケーションからのSpark to Db2 の利⽤例:MLlib 3. Db2に表を作成
  • 41. © 2017 IBM Corporation41 アプリケーションからのSpark to Db2 の利⽤例:MLlib 4. 新しいデータで合否判定を⾏いDb2に結果を格納 4.1 データ作成 # cat new_score.csv id,Math,English k,40,80 l,60,40 m,55,59 n,100,10 o,20,80 p,67,59 q,40,87 r,76,56 s,20,78 t,70,55 u,34,80
  • 42. © 2017 IBM Corporation42 アプリケーションからのSpark to Db2 の利⽤例:MLlib 4.2 2で保存したモデルと4.1のデータをロード from pyspark.ml import PipelineModel from pyspark.ml import Pipeline pipe1 = Pipeline.load('work/nog/score_pipeline') model1 = PipelineModel.load('work/nog/score_model') new_score = spark.read.csv('work/nog/new_score.csv', header=True, inferSchema=True)
  • 43. © 2017 IBM Corporation43 アプリケーションからのSpark to Db2 の利⽤例:MLlib 4.3 スコアリングを実施しDb2に格納 predict = model1.transform(new_score) toDb = predict.select('id', 'Math','English','prediction') toDb.write.format("com.ibm.idax.spark.idaxsource") ¥ .options(dbtable="BLUADMIN.NOG_EXAM") ¥ .option("allowAppend","true") ¥ .mode("append")¥ .save() 4.4 データが⼊ったことを確認 ID、数学の成績(MATH_SCORE) と英語の成績(ENGLISH_SCORE) に加えて、合否予測のスコアリング結果 (RESULT)がデータベースに格納され た model.transformでス コアリングを実⾏ スコアリング結果から必要 な列だけを取り出し Db2への書き込み
  • 44. © 2017 IBM Corporation44 アプリケーションからのSpark to Db2 の利⽤例:MLlib ・合格者だけ取り出す predict = model1.transform(new_score) toDb_tmp = predict.select('id', 'Math','English','prediction’) toDb = toDb_tmp.where(toDb_tmp.prediction == 1) toDb.write.format("com.ibm.idax.spark.idaxsource") ¥ .options(dbtable="BLUADMIN.NOG_EXAM") ¥ .option("allowAppend","true") ¥ .mode("append")¥ .save() toDb = toDb_tmp.where(toDb_tmp.prediction == 1).count() ・合格者の⼈数をカウント 補⾜:Db2に⼊れる前に以下のようなさまざまな前処理をsparkで実施することが可能 前ページの処理に条件抽 出処理を追加
  • 45. © 2017 IBM Corporation45 データの並列処理
  • 46. © 2017 IBM Corporation46 データの並列処理(DBデータの取得) (1/3) § Db2 Warehouse SMP環境における並列処理 - SMP環境では、Db2はMPP構成ではなくシングル構成で作成される - そのため、Spark側でもDataFrameでデータを取得した時点では分散されていない - repartitionメソッドを指定することで、DataFrameを明示的に分散し、並列処理させることができ る input = sparkSession.read.format("com.ibm.idax.spark.idxsource"). options(dbtable="SPARK_TEST_DATA"). load() input = input.repartition(10) § MPP/SMPとも、Spark EngineとDB間のデータ連携はプロセス間通信を使用して高速に実行される 10パーティションで 並列処理させる場合の例 IDAXデータソース を使用
  • 47. © 2017 IBM Corporation47 Db2 Warehouse MPPクラスター データの並列処理(DBデータの取得) (2/3) § Db2 Warehouse MPP環境での並列処理 - Db2 Warehouseは、複数のサーバーが連携するMPP環境では、24もしくは60のプ ロセスで分散処理を行う構成で構築される。 - MPP構成でDBデータをSparkに取得した場合、自動的にDb2 Warehouseの各Data partitionに対応してDataFrameが分散される (24 partitionであれば、24個の DataFrameに分割される) - Sparkによる分散処理を活かすため、可能な限りSpark DataFrameのまま処理を進 めることが推奨される DBデータは分散キー 列のハッシュ値を元に 分散配置されている パーティション数に 対応した DataFrameが使用 される § MPP/SMPとも、Spark EngineとDB間のデータ連携はプロセス間通信を使用して高速に実行される
  • 48. © 2017 IBM Corporation48 データの並列処理(DBデータの取得) (3/3) from pyspark.sql import SparkSession sparkSession = SparkSession.builder.getOrCreate() inputData = sparkSession.read.format("com.ibm.idax.spark.idaxsource") ¥ .options(dbtable="SPARK_TEST_DATA") ¥ .load() inputData.count() • MPP環境でのテーブル件数カウント例 IDAXデータソース を使用 MPP環境なので repartition指定は不要 CountRDD:54 - Partition [Database partition 4 stored on host node1i (port 0)] is connected to DB2 member 0 CountRDD:54 - Partition [Database partition 13 stored on host node2i (port 0)] is connected to DB2 member 8 CountRDD:54 - Partition [Database partition 23 stored on host node3i (port 0)] is connected to DB2 member 16 ... MisplacedPartitionChecker:42 - retrieving data of partition [Database partition 1 stored on host node1i (port 0)] from host node1i MisplacedPartitionChecker:42 - retrieving data of partition [Database partition 15 stored on host node2i (port 0)] from host node2i MisplacedPartitionChecker:42 - retrieving data of partition [Database partition 22 stored on host node3i (port 0)] from host node3i ... CountRDD:54 - Count query SELECT count_big(*) FROM BLUADMIN.SPARK_TEST_DATA WHERE (dbpartitionnum("ID") = ? selectivity 0.000000000000000001) /* <OPTGUIDELINES><REGISTRY><OPTION NAME='DB2_SELECTIVITY' VALUE='YES'/></REGISTRY></OPTGUIDELINES> */ returned 38 rows CountRDD:54 - Count query SELECT count_big(*) FROM BLUADMIN.SPARK_TEST_DATA WHERE (dbpartitionnum("ID") = ? selectivity 0.000000000000000001) /* <OPTGUIDELINES><REGISTRY><OPTION NAME='DB2_SELECTIVITY' VALUE='YES'/></REGISTRY></OPTGUIDELINES> */ returned 46 rows • Spark実行ログ (抜粋) Database Partitionと実 行ノードを自動認識 各Partitionで処理を 分散実行
  • 49. © 2017 IBM Corporation49 データの並列処理(CSVファイル) (1/2) from pyspark import SparkContext data_file = "work/Tsuji/Test01.csv" raw_data = SparkContext.textFile(data_file) raw_data.count() • CSV件数カウント例 SparkContextを使用 • Spark実行ログ 自動的に13のタスクに分割 され、3ノードで実行される 入力ファイルは約400MB(2000万件) 各ノードのExecutor (並列処理の ワーカー)がファイルへアクセス § 分割可能なファイルの分散処理 (自動) - プレーンテキストやbzip2は分割可能(splittable)であり、自動的に並行処理される
  • 50. © 2017 IBM Corporation50 データの並列処理(CSVファイル) (2/2) • Spark実行ログ (続き) 13タスクで件数をカウントし、 合計値を呼び出し元に返す 各ノードで処理を分散 注: gzipファイルは分割可能ではないため、自動並列処理は行なわれない。圧縮率や実行速度を鑑み、適切な形式(圧縮/非圧縮)を選択すること。
  • 51. © 2017 IBM Corporation51 Db2への処理オフロード
  • 52. © 2017 IBM Corporation52 Db2への処理オフロード from pyspark.sql import SparkSession sparkSession = SparkSession.builder.getOrCreate() table = "TUKI.SPARK_T7" # SparkSessionのread関数を利⽤してDataFrameを定義する df = sparkSession.read ¥ .format("com.ibm.idax.spark.idaxsource") ¥ .options(dbtable=table, sqlpredicate=“C1 < 10") ¥ .load() df.count() # Filterメソッドによる絞り込み df.filter(df['C2'] < 50).show() DataFrame定義時にFilter条 件を指定する例 § SparkからDb2への処理オフロード - Db2 Warehouseに統合されたSparkでは、フィルター処理のDb2へのオフロードが実 装されている。 - DataFrame定義時のsqlpredicateによる条件の指定や、DataFrameのfilterメソッド 利用時に有効になる Filterメソッドによる絞り込 みも可能
  • 53. © 2017 IBM Corporation53 Db2への処理オフロード member STMT_TEXT ------ ------------------------------------------------------------------------------------------------------------------------- 0 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10) 1 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10) 2 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10) 3 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10) 4 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10) 5 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10) 6 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10) 7 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10) 8 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10) 9 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10) 10 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10) 11 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10) 12 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10) 13 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10) 14 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10) 15 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10) 16 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10) 17 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10) 18 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10) 19 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10) 20 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10) 21 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10) 22 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10) 23 SELECT count_big(*) FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C1 < 10) 24のDB partitionそれぞれ にSQLが発⾏されている df.count()実行時のSQL DataFrame作成時に定義し たsqlpredicateがSQLに埋め 込まれている
  • 54. © 2017 IBM Corporation54 Db2への処理オフロード member STMT_TEXT ------ ------------------------------------------------------------------------------------------------------------------------- 0 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10) 1 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10) 2 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10) 3 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10) 4 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10) 5 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10) 6 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10) 7 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10) 8 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10) 9 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10) 10 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10) 11 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10) 12 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10) 13 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10) 14 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10) 15 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10) 16 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10) 17 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10) 18 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10) 19 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10) 20 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10) 21 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10) 22 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10) 23 SELECT "C1","C2","C3","C4","C5","C6" FROM TUKI.SPARK_T7 WHERE (dbpartitionnum("C1") = ? selectivity 0.000000000000000001) AND (C2 IS NOT NULL) AND (C2 < 50) AND (C1 < 10) df.filter(df['C2'] < 50).show()実行時のSQL DataFrame作成時に定義した sqlpredicateとfilterメソッドによる絞り 込みが共にSQLに埋め込まれている
  • 55.
  • 56. © 2017 IBM Corporation56 Legal Disclaimer • © IBM Corporation 2016. All Rights Reserved. • The information contained in this publication is provided for informational purposes only. While efforts were made to verify the completeness and accuracy of the information contained in this publication, it is provided AS IS without warranty of any kind, express or implied. In addition, this information is based on IBM’s current product plans and strategy, which are subject to change by IBM without notice. IBM shall not be responsible for any damages arising out of the use of, or otherwise related to, this publication or any other materials. Nothing contained in this publication is intended to, nor shall have the effect of, creating any warranties or representations from IBM or its suppliers or licensors, or altering the terms and conditions of the applicable license agreement governing the use of IBM software. • References in this presentation to IBM products, programs, or services do not imply that they will be available in all countries in which IBM operates. Product release dates and/or capabilities referenced in this presentation may change at any time at IBM’s sole discretion based on market opportunities or other factors, and are not intended to be a commitment to future product or feature availability in any way. Nothing contained in these materials is intended to, nor shall have the effect of, stating or implying that any activities undertaken by you will result in any specific sales, revenue growth or other results. • If the text contains performance statistics or references to benchmarks, insert the following language; otherwise delete: Performance is based on measurements and projections using standard IBM benchmarks in a controlled environment. The actual throughput or performance that any user will experience will vary depending upon many factors, including considerations such as the amount of multiprogramming in the user's job stream, the I/O configuration, the storage configuration, and the workload processed. Therefore, no assurance can be given that an individual user will achieve results similar to those stated here. • If the text includes any customer examples, please confirm we have prior written approval from such customer and insert the following language; otherwise delete: All customer examples described are presented as illustrations of how those customers have used IBM products and the results they may have achieved. Actual environmental costs and performance characteristics may vary by customer. • Please review text for proper trademark attribution of IBM products. At first use, each product name must be the full name and include appropriate trademark symbols (e.g., IBM Lotus® Sametime® Unyte™). Subsequent references can drop “IBM” but should include the proper branding (e.g., Lotus Sametime Gateway, or WebSphere Application Server). Please refer to http://www.ibm.com/legal/copytrade.shtml for guidance on which trademarks require the ® or ™ symbol. Do not use abbreviations for IBM product names in your presentation. All product names must be used as adjectives rather than nouns. Please list all of the trademarks that you use in your presentation as follows; delete any not included in your presentation. IBM, the IBM logo, Lotus, Lotus Notes, Notes, Domino, Quickr, Sametime, WebSphere, UC2, PartnerWorld and Lotusphere are trademarks of International Business Machines Corporation in the United States, other countries, or both. Unyte is a trademark of WebDialogs, Inc., in the United States, other countries, or both. • If you reference Adobe® in the text, please mark the first use and include the following; otherwise delete: Adobe, the Adobe logo, PostScript, and the PostScript logo are either registered trademarks or trademarks of Adobe Systems Incorporated in the United States, and/or other countries. • If you reference Java™ in the text, please mark the first use and include the following; otherwise delete: Java and all Java-based trademarks and logos are trademarks or registered trademarks of Oracle and/or its affiliates. • If you reference Microsoft® and/or Windows® in the text, please mark the first use and include the following, as applicable; otherwise delete: Microsoft and Windows are trademarks of Microsoft Corporation in the United States, other countries, or both. • If you reference Intel® and/or any of the following Intel products in the text, please mark the first use and include those that you use as follows; otherwise delete: Intel, Intel Centrino, Celeron, Intel Xeon, Intel SpeedStep, Itanium, and Pentium are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries. • If you reference UNIX® in the text, please mark the first use and include the following; otherwise delete: UNIX is a registered trademark of The Open Group in the United States and other countries. • If you reference Linux® in your presentation, please mark the first use and include the following; otherwise delete: Linux is a registered trademark of Linus Torvalds in the United States, other countries, or both. Other company, product, or service names may be trademarks or service marks of others. • If the text/graphics include screenshots, no actual IBM employee names may be used (even your own), if your screenshots include fictitious company names (e.g., Renovations, Zeta Bank, Acme) please update and insert the following; otherwise delete: All references to [insert fictitious company name] refer to a fictitious company and are used for illustration purposes only.