English SDK for Apache Spark
注
この記事では、Apache Spark の英語の SDK について説明します。 Apache Spark 用のこの英語の SDK は、Databricks で直接サポートされていません。 フィードバックの提供、質問、問題の報告を行うには、GitHub の Apache Spark リポジトリの英語 SDK の [ 問題 ] タブを使用します。
Apache Spark 用の英語の SDK は、英語の命令を受け取り、それらを Spark オブジェクトにコンパイルします。 その目標は、Sparkをよりユーザーフレンドリーでアクセスしやすくし、データから知見を抽出することに集中できるようにすることです。
次の情報には、Databricks Python ノートブックを使用して Apache Spark 用の英語の SDK を呼び出す方法を説明する例が含まれています。 この例では、プレーンな英語の質問を使用して、Databricks ワークスペースのテーブルに対して SQL クエリーを実行するように Apache Spark の英語 SDK をガイドします。
要件
Databricks は、GPT-4 が Apache Spark 用の英語の SDK で最適に動作することを発見しました。 この記事では GPT-4 を使用し、OpenAI 課金プランに関連付けられている OpenAI API キーがあることを前提としています。 OpenAI 課金プランを開始するには、 https://platform.openai.com/account/billing/overview からサインインします。 [ お支払いプランを開始] をクリックし、画面の指示に従います。 OpenAI 課金プランを開始した後、OpenAI API キーを生成するには、https://platform.openai.com/account/api-keys からサインインします。 をクリックし、[ 新しいシークレットキーの作成] をクリックします。
この例では、Databricks クラスターに接続されている Databricks ワークスペースで使用できる Databricks Python ノートブックを使用します。
ステップ 1: Apache Spark 用の英語 SDK 用の Python パッケージをインストールする
ノートブックの最初のセルで次のコードを実行し、アタッチされたコンピュート リソースに、Apache Spark 用の英語 SDK 用の最新バージョンの Python パッケージをインストールします。
%pip install pyspark-ai --upgrade
ステップ 2: Python カーネルを再起動して、更新されたパッケージを使用する
ノートブックの 2 番目のセルで次のコードを実行し、Python カーネルを再起動して、Apache Spark 用の英語 SDK とその更新されたパッケージの依存関係用に更新された Python パッケージを使用します。
dbutils.library.restartPython()
ステップ 3: OpenAI API キーを設定する
ノートブックの 3 番目のセルで次のコードを実行し、 OPENAI_API_KEY
という名前の環境変数を OpenAI API キーの値に設定します。 Apache Spark の英語の SDK は、この OpenAPI キーを使用して OpenAI で認証します。 <your-openai-api-key>
を OpenAI API キーの値に置き換えます。
import os
os.environ['OPENAI_API_KEY'] = '<your-openai-api-key>'
重要
この例では、速度と使いやすさのために、OpenAI API キーをノートブックにハードコーディングします。 本番運用シナリオでは、OpenAI API キーをノートブックにハードコーディングしないことがセキュリティのベスト プラクティスです。 別の方法の 1 つは、アタッチされたクラスターでこの環境変数を設定することです。 環境変数を参照してください。
ステップ 4: LLMの設定とアクティブ化
ノートブックの 4 番目のセルで次のコードを実行して、Apache Spark 用英語 SDK で使用する LLM を設定し、選択したモデルで英語 SDK for Apache Spark をアクティブ化します。 この例では、GPT-4 を使用します。 既定では、Apache Spark 用の英語の SDK は OPENAI_API_KEY
という名前の環境変数を検索し、その値を使用して OpenAI で認証し、GPT-4 を使用します。
from langchain.chat_models import ChatOpenAI
from pyspark_ai import SparkAI
chatOpenAI = ChatOpenAI(model = 'gpt-4')
spark_ai = SparkAI(llm = chatOpenAI)
spark_ai.activate()
ヒント
GPT-4 をデフォルトの LLM として使用するには、このコードを次のように簡略化します。
from pyspark_ai import SparkAI
spark_ai = SparkAI()
spark_ai.activate()
ステップ 5: ソースDataFrameを作成する
ノートブックの 5 番目のセルで次のコードを実行すると、Databricks ワークスペースからsamples.nyctaxi.trips
テーブル内のすべてのデータが選択され、Apache Spark 用英語の SDK で動作するように最適化された DataFrame にこのデータが格納されます。 この DataFrame は、ここでは変数 df
で表されます。
df = spark_ai._spark.sql("SELECT * FROM samples.nyctaxi.trips")
ステップ6:平易な英語の質問を使用して DataFrame をクエリーする
ノートブックの 6 番目のセルで次のコードを実行し、英語の SDK for Apache Spark に、2016 年 1 月の各日の平均移動距離を最も近い 10 分の 1 まで出力するように要求します。
df.ai.transform("What was the average trip distance for each day during the month of January 2016? Print the averages to the nearest tenth.").display()
Apache Spark 用の英語の SDK は、分析と最終的な回答を次のように出力します。
> Entering new AgentExecutor chain...
Thought: This can be achieved by using the date function to extract the date from the timestamp and then grouping by the date.
Action: query_validation
Action Input: SELECT DATE(tpep_pickup_datetime) as pickup_date, ROUND(AVG(trip_distance), 1) as avg_trip_distance FROM spark_ai_temp_view_2a0572 WHERE MONTH(tpep_pickup_datetime) = 1 AND YEAR(tpep_pickup_datetime) = 2016 GROUP BY pickup_date ORDER BY pickup_date
Observation: OK
Thought:I now know the final answer.
Final Answer: SELECT DATE(tpep_pickup_datetime) as pickup_date, ROUND(AVG(trip_distance), 1) as avg_trip_distance FROM spark_ai_temp_view_2a0572 WHERE MONTH(tpep_pickup_datetime) = 1 AND YEAR(tpep_pickup_datetime) = 2016 GROUP BY pickup_date ORDER BY pickup_date
> Finished chain.
Apache Spark 用の英語の SDK は、最終的な回答を実行し、結果を次のように出力します。
+-----------+-----------------+
|pickup_date|avg_trip_distance|
+-----------+-----------------+
| 2016-01-01| 3.1|
| 2016-01-02| 3.0|
| 2016-01-03| 3.2|
| 2016-01-04| 3.0|
| 2016-01-05| 2.6|
| 2016-01-06| 2.6|
| 2016-01-07| 3.0|
| 2016-01-08| 2.9|
| 2016-01-09| 2.8|
| 2016-01-10| 3.0|
| 2016-01-11| 2.8|
| 2016-01-12| 2.9|
| 2016-01-13| 2.7|
| 2016-01-14| 3.3|
| 2016-01-15| 3.0|
| 2016-01-16| 3.0|
| 2016-01-17| 2.7|
| 2016-01-18| 2.9|
| 2016-01-19| 3.1|
| 2016-01-20| 2.8|
+-----------+-----------------+
only showing top 20 rows
次のステップ
この例では変数
df
で表される DataFrameを別のデータで作成してみてください。df.ai.transform
関数に別の平易な英語の質問を使用してみてください。別のGPT-4モデルを使用してみてください。 GPT-4を参照してください。
その他のコード例を調べる。 次の追加リソースを参照してください。
関連リソース
GitHub の English SDK for Apache Spark リポジトリ
英語の SDK for Apache Spark ドキュメント Web サイト
2023 年の Data + AI サミット基調講演 での Apache Spark の英語 SDK の発表とデモンストレーション
Data + AI Summit 2023 での Apache Spark セッション用の英語 SDK