前回は、Modelerの拡張ノードでBigQueryからのインポートを試しました。
今回はエクスポートを試してみます。
実行環境
- IBM SPSS Modeler Client 18.3
- Python 3.8.9
準備
こちらの「準備」をご参照ください。
手順
1.Modelerの[エクスポート]パレットから「拡張のエクスポート」ノードを選択
2.ノードを開き、「Python for Spark」を選択
3.「Pythonシンタックス」に下記を記述
#Modeler用
import spss.pyspark.runtime
from pyspark.sql.types import *
asContext = spss.pyspark.runtime.getContext()
sparkContext = asContext.getSparkContext()
sqlContext = asContext.getSparkSQLContext()
inputData = asContext.getSparkInputData()
#BigQuery用
from google.cloud import bigquery
import os
import pandas
import pyarrow
#BigQuery認証用jsonファイルを指定(ローカルに保存)
#Windowsの場合は「r'ファイルパス'」("\"を"\\"または"/"に変換でもできるが面倒)
credentials_json = './XXXXX.json'
#BigQuery環境変数(PC側で環境変数を設定しても良いが、今回はここで記述)
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = credentials_json
#Modelerで使用
if not asContext.isComputeDataModelOnly():
#BigQuery接続用
bigquery_client = bigquery.Client()
#接続するプロジェクトID
project = 'XXXXXXXXXX'
#データセット名
dataset = 'YYYYYYYYYY'
#テーブル名
table = 'ZZZZZZZZZZ'
table_id= '{0}.{1}.{2}'.format(project, dataset, table)
df = inputData.select("*").toPandas()
#スキーマを作成
job_config = bigquery.LoadJobConfig(schema=[
bigquery.SchemaField("AAAAAAAAAA", "INTEGER"),
bigquery.SchemaField("BBBBBBBBBB", "STRING"),
])
job = bigquery_client.load_table_from_dataframe(
df, table_id, job_config=job_config
)
#ジョブの実行
job.result()
4.[OK]をクリック
5.テーブルノードを接続して実行できるか確認
今回は拡張ノードを使用しましたが、「拡張機能」であれば変数の入力欄だけを表示するオリジナルノードを作成できます。
コーディングに慣れていない方と共有する場合は、その方が便利かもしれませんね。
また、PythonからBigQueryへ接続できるか確認したい場合は、こちら↓をご参照ください。
※参考
https://www.ibm.com/docs/ja/spss-modeler/18.3.0?topic=spark-scripting-python
https://cloud.google.com/bigquery/docs/samples/bigquery-load-table-dataframe