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を参照してください。

  • その他のコード例を調べる。 次の追加リソースを参照してください。

関連リソース