English SDK for Apache Spark を Azure OpenAI Services により Databricks 上で動かしてみた

## 概要

English SDK for Apache Spark を Azure OpenAI Services により Databricks 上で実行する方法を共有します。

English SDK for Apache Spark とは、自然言語によりデータ操作を実施できるライブラリです。詳細については、[Introducing English as the New Programming Language for Apache Spark | Databricks Blog](https://www.databricks.com/blog/introducing-english-new-programming-language-apache-spark)に書かれています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/8aea120e-85ff-fd7e-6890-28c7a5ab6a1b.png)

引用元：[Introducing English as the New Programming Language for Apache Spark | Databricks Blog](https://www.databricks.com/blog/introducing-english-new-programming-language-apache-spark)

実行結果が出力されるだけでなく、実行したコードが表示されるため、妥当性を確認することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/875a9058-875f-de2d-f0e9-f2d175a66f58.png)


## 実行手順

### 1. English SDK for Apache Spark（`pyspark-ai`）のインストール

```python
%pip install pyspark-ai -q
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/cb67a1ea-e880-e871-0f59-e3b880979ead.png)

### 2. API の環境設定を変数にセット

```python
import os
import openai
 
# `Azure`固定
openai.api_type = "azure"
 
# Azure Open AI のエンドポイント
openai.api_base = "https://manabian-XXXXXXX.azure.com/"
 
# Azure Docs 記載の項目
openai.api_version = "2023-05-15"
 
# Azure Open AI のキー
os.environ["OPENAI_API_KEY"] = "882257f4cfaXXXXXXXXXXXXXXXXXXXXX"
 
# デプロイ名
deployment_id = "gpth_3"
 
# デプロイしたモデル名
model_name = "gpt-35-turbo"
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/d2ac5001-368b-f2bb-84ab-d79d232a6a83.png)

注記 1 Azure Docs 記載の項目 については、下記を参考にしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/3bf67d55-5cde-2e3d-01d6-5f08ea03774f.png)

引用元：[クイック スタート - Azure OpenAI Service で ChatGPT と GPT-4 の使用を開始する - Azure OpenAI Service | Microsoft Learn](https://learn.microsoft.com/ja-jp/azure/cognitive-services/openai/chatgpt-quickstart?tabs=command-line&pivots=programming-language-python#create-a-new-python-application)



### 3. English SDK for Apache Spark（`pyspark-ai`）の有効化

```python
from langchain.chat_models import ChatOpenAI
from pyspark_ai import SparkAI
 
llm = ChatOpenAI(
    deployment_id=deployment_id,
    model_name=model_name,
    temperature=0,
)
 
spark_ai = SparkAI(llm=llm, verbose=True)
spark_ai.activate()
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/ecc9ffce-a25e-b5f9-90ab-eb7c7a37480c.png)

### 4. データの読み込み

```python
tpch_lineitem__spark_df = spark.read.table("samples.tpch.lineitem")
tpch_lineitem__spark_ai_df = spark_ai.transform_df(tpch_lineitem__spark_df, "get all data")
 
tpch_lineitem__spark_ai_df.display()
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/54ddfc03-638e-6ec2-498a-47cc17c10ff6.png)

### 5. English SDK for Apache Spark によるデータフレームの説明

```python
tpch_lineitem__spark_ai_df.ai.explain()
```

```text
In summary, this dataframe is retrieving all columns from the `lineitem` table in the `tpch` database of the `samples` catalog.
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/d520c32d-1c78-85d8-9ef0-07e67b3e33e5.png)

### 6. English SDK for Apache Spark によるデータフレームの操作

```python
transfomed__spark_ai_df = tpch_lineitem__spark_ai_df.ai.transform(
    "`l_suppkey`別に、`l_quantity`と`l_extendedprice`を加算した値を`sales_amount`列として集計の上位10件。l_suppkey`列を文字型に変換。"
)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/c77319b0-affa-6d9e-20f5-14894f1aad28.png)

### 7. English SDK for Apache Spark によるデータの可視化

```python
transfomed__spark_ai_df.ai.plot("縦棒グラフ")
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/02490330-bfe4-79be-791b-332a3bd98285.png)