【SPSS】ModelerからPython経由でBigQueryに接続 ~拡張ノード エクスポート~

【SPSS】ModelerからPython経由でBigQueryに接続 ~拡張ノード エクスポート~

前回は、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