适用于 Apache Spark 的英语 SDK

注意

本文介绍适用于 Apache Spark 的英语 SDK。 Databricks 不支持此适用于 Apache Spark 的英语 SDK。 若要提供反馈、提出问题和报告问题,请使用 GitHub 上适用于 Apache Spark 的英语 SDK 存储库中的问题选项卡。

适用于 Apache Spark 的英语 SDK 采用英语说明,并将其编译为 Spark 对象。 其目标是使 Spark 对用户更友好且更易于访问,以便你能够专注于从数据中提取见解。

以下信息包括一个示例,该示例介绍如何使用 Azure Databricks Python 笔记本调用适用于 Apache Spark 的英语 SDK。 此示例使用纯英语问题来指导适用于 Apache Spark 的英语 SDK 从 Azure Databricks 工作区对表运行 SQL 查询。

要求

  • 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 中登录并单击“创建新密钥”
  • 此示例使用可在连接到 Azure Databricks 群集的 Azure Databricks 工作区中使用的 Azure Databricks Python 笔记本。

步骤 1:安装适用于 Apache Spark 的英语 SDK 的 Python 包

在笔记本的第一个单元中,运行以下代码,该代码在附加的计算资源上安装适用于 Apache Spark 的英语 SDK 的最新版本 Python 包:

%pip install pyspark-ai --upgrade

步骤 2:重启 Python 内核以使用更新后的包

在笔记本的第二个单元中,运行以下代码,该代码将重启 Python 内核,以便为适用于 Apache Spark 的英语 SDK 及其更新的包依赖项使用更新后的 Python 包:

dbutils.library.restartPython()

步骤 3:设置 OpenAI API 密钥

在笔记本的第三个单元中,运行以下代码,该代码将名为 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 密钥硬编码到笔记本中。 另一种替代方法是在附加群集上设置此环境变量。 请参阅环境变量

步骤 4:设置并激活 LLM

在笔记本的第四个单元中,运行以下代码,该代码设置希望适用于 Apache Spark 的英语 SDK 使用的 LLM,然后使用所选模型激活适用于 Apache Spark 的英语 SDK。 本示例使用 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:创建源数据帧

在笔记本的第五个单元中,运行以下代码,该代码从 Azure Databricks 工作区中选择 samples.nyctaxi.trips 表中的所有数据,并将此数据存储在经过优化的 DataFrame 中,以便与适用于 Apache Spark 的英语 SDK 配合使用。 在此处,该数据帧由变量 df 表示:

df = spark_ai._spark.sql("SELECT * FROM samples.nyctaxi.trips")

步骤 6:使用纯英语问题查询数据帧

在笔记本的第六个单元中,运行以下代码,该代码要求适用于 Apache Spark 的英语 SDK 打印 2016 年 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 表示。
  • 尝试对 df.ai.transform 函数使用不同的纯英语问题。
  • 尝试使用不同的 GPT-4 模型。 请参阅 GPT-4
  • 浏览其他代码示例。 请参阅以下附加资源。

其他资源