LoginSignup
7
0

弊社内でも盛り上がりを見せているEnglish SDK for Apache Spark。

誰でもOpenAI APIでgpt-4を使えるようになったので、日本語で色々頑張ってみます。

準備

ライブラリのインストール。

%pip install pyspark-ai
dbutils.library.restartPython()

環境設定。

import os

os.environ["OPENAI_API_KEY"] = dbutils.secrets.get("demo-token-takaaki.yayoi", "openai_api_key")
os.environ["GOOGLE_API_KEY"] = "<Google Cloud PlatformのAPIキー>"
os.environ["GOOGLE_CSE_ID"] = "<Google CSEのID>"

モデルを確認します。

import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.Model.list()

ありました。

      "id": "gpt-4",
      "object": "model",
      "created": 1687882411,
      "owned_by": "openai",

gpt-4を指定します。

from langchain.chat_models import ChatOpenAI
from pyspark_ai import SparkAI

# If 'gpt-4' is unavailable, use 'gpt-3.5-turbo' (might lower output quality)
llm = ChatOpenAI(model_name='gpt-4', temperature=0)

# Initialize SparkAI with the ChatOpenAI model
spark_ai = SparkAI(llm=llm, verbose=True)

# Activate partial functions for Spark DataFrame
spark_ai.activate()

ちなみにSparkAIを呼び出す際の引数にverbose=Trueを指定すると、処理過程が確認できて便利です。で、上のコメントのActivate partial functions for Spark DataFrameをスルーしていたのですが、以下で理解できました。

データの読み込み

普通にSparkデータフレームを読み込みます。

df = spark.read.table("takaakiyayoi_catalog.covid.covid_cases")
display(df)

Screenshot 2023-07-07 at 17.33.14.png

本当はspark_ai.create_dfを以下のように使ってやりたいのですが、以下の理由から現時点では断念しています。

df = spark_ai.create_df("2023年の日本の都道府県別、月別covid-19感染者数")
  • 指定した文字列でGoogle検索を行います。ヒットページにテーブルの記述があればそれをパースしてデータフレームを構成する仕組みのようです。
  • 当然、日本語のページがヒットするのですが、意外とTABLEタグでデータを記述しているサイトがありません。大抵GUIに埋もれていたり、csvファイルへのリンクなどになっています。

このため、現時点では別のデータソースからデータフレームを組み立てる方が確実です。

プロット

で、先ほどのActivate partial functions for Spark DataFrameですが、書いてある通りにSparkデータフレームで一部の関数を有効化したよということでした。つまり、SparkデータフレームにEnglish SDKのメソッドが追加されているのです。

こちらにも説明があります。

the English SDK can seamlessly integrate with the existing Spark APIs. This means that you use the the SDK on any Spark DataFrame. You can load your saved source in to df
English SDKは既存のSpark APIとシームレスに連携できます。これは、すべてのSparkデータフレームでEnglsh SDKを使うことができることを意味します。保存したソースをdfにロードすることができます。

つまり、上でspark_ai.activate()時点で、Sparkデータフレームで.ai...というメソッドを呼び出せるようになっています。

df.ai.plot("都道府県別の折れ線グラフ")

Screenshot 2023-07-07 at 17.41.49.png

やったー。

次は円グラフ。しかし、ここでつまづきました。

df.ai.plot("都道府県別の合計感染者数の円グラフ、上位5つを表示、それ以外は「その他」にまとめる。")

これだと、背後で行うデータフレームの結合処理で非推奨のappendを使ってしまい、処理に失敗します。concatでなくてはいけません。なので、プロンプトエンジニアリングのノリで以下のように。

df.ai.plot("都道府県別の合計感染者数の円グラフ、上位5つを表示、それ以外は「その他」にまとめる。まとめる際にはappendではなくconcatを使ってください。")

通りました。
Screenshot 2023-07-07 at 17.43.48.png

フィルタリング

東京ではマッチしなくてダメでした。

tokyo_df = df.ai.transform("Tokyoの2023年のデータ")
display(tokyo_df)

ちゃんと、年でもフィルタリングしてくれます。
Screenshot 2023-07-07 at 17.52.04.png

tokyo_df.ai.plot("月別の合計の棒グラフ")

Screenshot 2023-07-07 at 17.53.25.png

なんというか、半分プログラミング、半分プロンプトエンジニアリングという取り組みになりますね。面白い。

Databricksクイックスタートガイド

Databricksクイックスタートガイド

Databricks無料トライアル

Databricks無料トライアル

7
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
0