Как получать результаты обработки данных с помощью Apache Spark, адресуя ИИ бизнес-запросы на английском языке: знакомимся с English SDK от Databricks. Настоящий Low Code с PySpark-AI.
English SDK for Apache Spark и PySpark-AI: как это работает
Большие языковые модели (LLM, Large Language Model), основанные на генеративных нейросетях, применимы не только в чат-ботах и создании уникальных картинок. Они также отлично комментируют программный код и даже могут написать скрипт по запросу пользователя. Впрочем, как показывает личный опыт, вероятность того, что это скрипт будет работать с первого раза без ошибок, пока еще мала: приходится исправлять и уточнять полученный от нейросети результат. Однако, в целом ИИ-инструменты неплохо экономят время разработчика, подсказывая, в чем именно может быть причина ошибки или какую библиотеку следует использовать для решения конкретной задачи. Примечательно, что это вполне по силам не только ИИ-продуктам, ориентированным на разработку, таким как Copilot от GitHub и OpenAI, но и нейросеткам общего назначения.
Тем не менее, специализированный инструмент обычно работает лучше универсального. Поэтому LLM-модель, обученная на примерах кода, скорей всего, будет быстрее выдавать наиболее корректные результаты. Поэтому компания Databricks, которая развивает и коммерциализирует Apache Spark, решила внедрить возможности генеративного ИИ в SDK. Благодаря популярности Apache Spark и множеству учебников, статьей, а также примеров с отрытым исходным кодом, современные большие языковые модели неплохо ориентируются в этом фреймворке. Поэтому разработчики Databricks выбрали английский язык в качестве языка программирования, чтобы генеративный ИИ компилировал инструкции на естественном языке в код PySpark и SQL.
Англоязычный набор инструментов разработчика для Apache Spark (English SDK for Apache Spark) берет инструкции на английском языке и компилирует их в объекты PySpark, такие как DataFrames, чтобы реализовать следующие возможности:
- поиск в Интернете, используя предоставленное пользователем описание и включать выбранные веб-данные в код Spark-приложения;
- операции с DataFrame, включая преобразование, построение графиков и интерпретация на основе пользовательского англоязычного описания;
- пользовательские функции (UDF) – при использовании простого декоратора пользователю нужно предоставить строку документации, а LLM-модель сама завершит процесс создания UDF, позволяя разработчику сосредоточиться на определении функции;
- кэширование для повышения скорости выполнения запросов и получения воспроизводимых результатов. SparkAI хранит в памяти промежуточный кэш, который обновляется для LLM и результатов веб-поиска. Промежуточный кэш можно сохранить с помощью метода commit(). Поиск в кэше всегда выполняется как в промежуточном кэше в памяти, так и в постоянном кэше.
В работе English SDK используется PySpark-AI, Python-оболочка, которая использует модели генеративного языка для упрощения генерации кода PySpark. Принимая инструкции на английском языке, он объединяет возможности Apache Spark с такими моделями, как GPT-4 и GPT-3.5. PySpark-AI принимает на вход англоязычные инструкции и выполняет их, позволяя пользователю сфокусироваться на обработке данных, а не на кодировании.
Чтобы использовать PySpark-AI, необходимо установить этот пакет с помощью менеджера пакетов pip:
pip install pyspark-ai
Чтобы использовать LLM-модели OpenAI, надо задать секретный ключ в качестве переменной среды OPENAI_API_KEY:
export OPENAI_API_KEY='your api key'
По умолчанию SparkAIэкземпляры будут использовать модель GPT-4, однако, можно выбрать и другие варианты. Сперва следует инициализировать PySpark-AI:
from pyspark_ai import SparkAI spark_ai = SparkAI() spark_ai.activate()
Затем можно выполнить преобразования с датафреймом, сначала определив его:
df = spark_ai._spark.createDataFrame( [ ("Normal", "Cellphone", 6000), ("Normal", "Tablet", 1500), ("Mini", "Tablet", 5500), ("Mini", "Cellphone", 5000), ("Foldable", "Cellphone", 6500), ("Foldable", "Tablet", 2500), ("Pro", "Cellphone", 3000), ("Pro", "Tablet", 4000), ("Pro Max", "Cellphone", 4500) ], ["product", "category", "revenue"] )
Для выполнения преобразования запрос пишется на английском языке, например, какие товары являются самыми продаваемыми и вторыми по популярности в каждой категории:
df.ai.transform("What are the best-selling and the second best-selling products in every category?").show()
Из-за отсутствия ключа OPENAI_API_KEY и невозможности получить его без обходных путей типа VPN или веб-прокси, у меня пока не получилось попробовать PySpark-AI на практике, чтобы запустить в Google Colab следующий код:
!pip install pyspark-ai pyspark plotly !pip install langchain import pyspark from langchain.chat_models import AzureChatOpenAI from pyspark_ai import SparkAI from pyspark.sql import SparkSession spark = SparkSession.builder.appName("tech_comp").getOrCreate() llm = AzureChatOpenAI() spark_ai = SparkAI(llm=llm) spark_ai.activate() df = spark_ai.create_df("https://companiesmarketcap.com/tech/largest-tech-companies-by-market-cap/", ["company_name", "market_cap_trillion", "country"]) df.ai.plot() df.ai.explain() df.ai.plot("pie chart companies, show the top 5 brands and the sum of others")
Этот код создает датафрейм из данных о крупнейших технологических компаниях по рыночной капитализации, представленных на сайте по заданному URL-адресу, а также вызывает функции LLM для построения графиков и интерпретации набора данных.
Впрочем, даже без практической демонстрации становится понятно, что PySpark-AI не заменяет разработчика, а лишь ускоряет процесс исследования данных, позволяя аналитику и специалисту по Data Science проверять гипотезы самостоятельно.
В заключение отметим, что Enflish SDK for Apache Spark добавлен в официальный релиз 3.5.0, о котором мы рассказываем в новой статье.
Освойте возможности Apache Spark для разработки приложений аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
Источники