LoginSignup
10
4

Data & AIのサミットで発表された新機能:DatabricksのEnglish SDK for Apache Sparkを試してみた

Last updated at Posted at 2023-06-30

はじめに

DatabricksのイベントData & AI Summitで非常に興味深いソリューションが発表されました。
その名もEnglish SDK for Apache Spark.

まだ開発の初期段階とのことですが、すでにGitにも公開されており、試すことができます。

早速、Databricks上で使ってみました。

ノートブック

こちらにノートブックを公開しますので、Databricks環境にインポートしてお試しください。
サンプルノートブック

設定

pyspark-aiをインストールします。

%pip install pyspark-ai

LLMを指定します。OPEN AIを利用する場合、Secret Keyを取得し環境変数のOPENAI_API_KEYを設定する必要があります。(OpenSource版はまた今度試してみます)

LLMの指定をしない場合、デフォルトでChatGPT-4を利用しようとするので、まだ利用できない場合は以下のように3.5を指定します。

Databricksをお使いの場合は、DatabricksのSecret機能を利用して、Secret Keyを保護してください。

OPENAI_API_KEYの設定
import os
os.environ["OPENAI_API_KEY"] = dbutils.secrets.get("<scope>", "<key>")
LLMの設定
from pyspark_ai import SparkAI
import openai
from langchain.chat_models import ChatOpenAI

llm = ChatOpenAI(model_name="gpt-3.5-turbo",temperature=0, verbose=True)

spark_ai = SparkAI(llm=llm)
spark_ai.activate()  # active partial functions for Spark DataFrame 

利用開始

それでは早速使ってみます。

やり方はちょっと違うかもしれませんが、UnityCatalogからデータを読み込み、spark_aiのDataframeに取り込みます。

taxi = spark.read.table("samples.nyctaxi.trips")
taxi_df = spark_ai.transform_df(taxi, "get all data")
display(taxi_df)

image.png

可視化

ChatGPTなので、日本語でも指令できます。

image.png

image.png

UDFの作成

運賃を距離で割るUDFを作成。その際距離が0の場合。”-1”と表示するように、自然言語で指令

from pyspark.sql.functions import *

@spark_ai.udf
def fare_per_distance(amount: int, distance: int) -> int:
    """Calculate fare amount per distance. distanceが0の場合は"-1"とする"""

spark.udf.register("fare_per_distance", fare_per_distance)
taxi_df.createOrReplaceTempView("taxiDF")

rate_df = spark.sql("select fare_amount, trip_distance, fare_per_distance(fare_amount, trip_distance) as fare_distance from taxiDF")
display(rate_df) 

image.png

Dataframeの説明を求める

rate_df.ai.explain()

image.png

URLからデータを取得(スクレイピング)

参照先URL:https://www.carpro.com/blog/full-year-2022-national-auto-sales-by-brand

auto_df = spark_ai.create_df("https://www.carpro.com/blog/full-year-2022-national-auto-sales-by-brand")
display(auto_df)

image.png

データ変換・探索

auto_top_growth_df=auto_df.ai.transform("急成長しているブランドは?")
display(auto_top_growth_df)

image.png

さいごに

こちらEnglish SDKという名前でしたが、日本語でも利用することが出来て、非常にパワフルなツールになりそうということが分かりました。まだまだ開発を進めているようなので是非開発プロジェクトに入ってフィードバックをしてください。

しかし、自然言語とデータ分析って相性いいですね。

10
4
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
10
4