PySpark SQL и DataFrames

В предыдущей статье мы рассмотрели основы работы с большими данными с помощью PySpark. В этой статье мы рассмотрим PySpark SQL, который представляет собой высокоуровневый API Spark для работы со структурированными данными. Вы узнаете, как взаимодействовать с PySparkSQL с помощью DataFrame API и SQL-запроса. Кроме того, расскажите о некоторых методах визуализации, которые могут помочь нам разобраться в наших данных в PySpark DataFrames. В конце концов, вы узнаете важные алгоритмы машинного обучения.

PySpark SQL

PySpark SQL - это библиотека Spark для структурированных данных. В отличие от PySpark RDD API, PySpark SQL предоставляет больше информации о структуре данных и ее вычислениях. Он предоставляет программную абстракцию под названием DataFrames.

DataFrame - это неизменяемая распределенная коллекция данных с именованными столбцами. Это похоже на таблицу в SQL. DataFrames предназначены для обработки большого количества структурированных данных, таких как реляционная база данных, и полуструктурированных данных, таких как JSON (нотация объектов JavaScript). DataFrame API в настоящее время поддерживает несколько языков, таких как Python, R, Scala и Java. DataFrames позволяет PySpark запрашивать данные двумя разными способами:

  1. SQL, например (ВЫБРАТЬ * из таблицы)
  2. метод выражения, например (df.select ())

SparkSession

SparkSession делает для DataFrames то же, что SparkContext для RDD. SparkSession предоставляет единую точку входа для взаимодействия с базовыми функциями Spark и позволяет программировать Spark с помощью DataFrame API. SparkSession можно использовать для создания DataFrame, регистрации DataFrame как таблиц, выполнения SQL для таблиц, таблиц кеширования и т. Д. Подобно SparkContext, SparkSession предоставляется оболочке PySpark как искра переменной.

Создание DataFrames в PySpark

Прежде чем идти дальше, давайте разберемся, что такое схема. Схема - это структура данных в DataFrame, которая помогает Spark более эффективно оптимизировать запросы к данным. Схема предоставляет информационные детали, такие как имя столбца, тип данных в этом столбце и то, разрешены ли в столбце нулевые или пустые значения.

DataFrames в Pyspark можно создавать двумя основными способами:

  1. Из существующего RDD с помощью метода createDataFrame SparkSession

Тип созданного объекта можно подтвердить с помощью метода типа, который показывает, что это PySpark DataFrame. Здесь следует отметить, что когда схема представляет собой список имен столбцов, тип каждого столбца будет выводиться из данных, как показано выше. Однако, когда схема имеет значение Нет, она будет пытаться вывести схему из данных.

2. Из разных источников данных, таких как CSV, JSON, TXT, с использованием метода чтения SparkSession.

Независимо от типа файла для этого метода требуется путь к файлу и два необязательных параметра.

Первый необязательный параметр header = True может быть передан, чтобы убедиться, что метод обрабатывает первую строку как имена столбцов.

Второй необязательный параметр, inferSchema = True, может быть передан, чтобы инструктировать читателя DataFrame вывести схему из данных, и тем самым он попытается назначить правильный тип данных каждому столбцу на основе содержимого.

Операторы DataFrame в PySpark

Подобно операциям RDD, операции DataFrame в PySpark можно разделить на преобразования и действия.

Преобразования DataFrame:

select () используется для извлечения одного или нескольких столбцов из DataFrame. Нам нужно передать имя столбца внутри операции выбора.

filter () выбирает только строки, соответствующие указанному условию.

groupby () группирует DataFrame, используя указанные столбцы, поэтому мы можем выполнять по ним агрегирование.

orderBy () возвращает DataFrame, отсортированный по заданным столбцам.

dropDuplicates () возвращает новый DataFrame с удаленными повторяющимися строками.

withColumnRenamed () возвращает новый DataFrame путем переименования существующего столбца.

Действия с DataFrame:

printSchema () Чтобы проверить типы столбцов в DataFrame, мы можем использовать действие printSchema.

Действие show (n) для распечатки первых n строк из нового фрейма данных.

count () возвращает количество строк, присутствующих во фрейме данных.

columns возвращает имена всех столбцов в DataFrame в виде массива строк.

description () используется для расчета сводной статистики числовых столбцов в DataFrame. Если мы не укажем имена столбцов, будет вычислена сводная статистика для всех числовых столбцов, присутствующих в DataFrame.

SQL-запросы в PySpark

Подобно DataFrame API, PySpark SQL позволяет вам управлять DataFrame с помощью SQL-запросов. Поговорим о различиях;

DataFrames API предоставляет программный интерфейс - в основном предметно-ориентированный язык (DSL) для взаимодействия с данными. Запросы DataFrame намного проще создавать программно.

Простые запросы SQL могут быть значительно более краткими и понятными. Они также переносимы и могут использоваться без каких-либо изменений со всеми поддерживаемыми языками.

Выполнение SQL-запросов

SparkSession предоставляет метод sql, который можно использовать для выполнения SQL-запроса. Метод sql принимает в качестве аргумента инструкцию SQL и возвращает DataFrame, представляющий результат данного запроса. К сожалению, SQL-запросы нельзя запускать непосредственно в DataFrame.

Чтобы выполнить SQL-запросы к существующему DataFrame, мы можем использовать функцию createOrReplaceTempView для создания временной таблицы.

Визуализация данных

Визуализация данных - это способ представления ваших данных в виде графиков или диаграмм. Он считается важным компонентом исследовательского анализа данных (EDA).

Для визуализации в Python существует несколько инструментов с открытым исходным кодом, таких как matplotlib, Seaborn, Bokeh и т. Д. Однако ни один из этих инструментов визуализации не может использоваться непосредственно с DataFrames PySpark.

В настоящее время доступны три различных метода создания диаграмм с использованием PySpark DataFrames.

1. Использование Pyspark_dist_explore:

В Pyspark_dist_explore доступны 3 функции для создания графиков matplotlib с минимальным объемом необходимых вычислений - hist, distplot и pandas_histogram.

2. Использование Pandas для построения DataFrames:

Он преобразует фрейм данных PySpark в фрейм данных Pandas. После преобразования из pandas DataFrames легко создавать диаграммы, используя инструменты matplotlib или seaborn plotting.

Прежде чем двигаться дальше, давайте посмотрим на разницу между Pandas и Spark DataFrames:

Pandas - это единый станок, ограниченный рамками одного станка. Таким образом, их размер ограничен памятью вашего сервера, и вы будете обрабатывать их с мощностью одного сервера. Напротив, операции с фреймами данных Pyspark выполняются параллельно на разных узлах кластера.

В pandas DataFrames мы получаем результат, как только применяем любую операцию, тогда как операции в PySpark DataFrames ленивы по своей природе.

Вы можете изменить фрейм данных Pandas, используя методы. Мы не можем изменить PySpark DataFrame из-за его неизменяемого свойства.

Наконец, Pandas API поддерживает больше операций, чем PySpark DataFrames.

3. Использование метода HandySpark

HandySpark разработан для улучшения взаимодействия с пользователем PySpark, особенно когда речь идет об исследовательском анализе данных, включая возможности визуализации. Он упрощает получение данных или вычисление статистики для столбцов, сразу же возвращая объекты pandas.

PySpark MLlib

PySpark MLlib - это встроенная библиотека для масштабируемого машинного обучения. Он поддерживает только API на основе RDD. На высоком уровне PySpark MLlib предоставляет такие инструменты, как:

  1. Алгоритмы машинного обучения, которые включают совместную фильтрацию, классификацию и кластеризацию.
  2. Функции, которые включают извлечение, преобразование, уменьшение размерности и выбор.
  3. Конвейеры, которые включают построение, оценку и настройку конвейеров машинного обучения.

Многие из вас слышали о scikit-learn, очень популярной и простой в использовании библиотеке Python для машинного обучения. Тогда зачем нужен PySpark MLlib? Алгоритмы Scikit-learn хорошо работают для небольших и средних наборов данных, которые могут обрабатываться на одной машине, но не для больших наборов данных, требующих мощности параллельной обработки.

С другой стороны, PySpark MLlib содержит только алгоритмы, в которых операции могут применяться параллельно между узлами в кластере. В отличие от Scikit-learn, MLlib поддерживает несколько других более высоких языков, таких как Scala, Java и R, в дополнение к Python. MLlib также предоставляет высокоуровневый API для создания конвейеров машинного обучения. Конвейер машинного обучения - это полный рабочий процесс, объединяющий несколько алгоритмов машинного обучения.

Алгоритмы PySpark MLlib

PySpark хорош для итерационных алгоритмов, и с использованием итеративных алгоритмов многие алгоритмы машинного обучения были реализованы в PySpark MLlib.

Совместная фильтрация: алгоритм наименьших квадратов с чередованием (ALS).

Классификация и регрессия: линейные SVM, логистическая регрессия, деревья решений, случайные леса, деревья с градиентным усилением, наивный байесовский метод, линейные наименьшие квадраты, лассо, регрессия по гребню, изотоническая регрессия.

Алгоритмы кластеризации: K-средние, гауссовское смешение, деление пополам K-средних и потоковые K-средние.

Три компонента машинного обучения в PySpark MLlib:

Хотя PySpark MLlib включает в себя несколько алгоритмов машинного обучения, мы специально сосредоточимся на трех компонентах машинного обучения.

Совместная фильтрация: дает рекомендации на основе прошлого поведения, предпочтений или сходства с известными объектами / пользователями.

Классификация. Определение того, к какой из категорий относится новое наблюдение.

Кластеризация: группирование данных в кластеры на основе схожих характеристик.

Давайте быстро поймем, как мы можем импортировать библиотеки PySpark MLlib в среду оболочки PySpark.

Хорошо! Позвольте мне подвести итоги и посмотреть, что мы уже рассмотрели. Здесь мы узнали, как взаимодействовать с PySparkSQL, используя DataFrame API и SQL-запрос. Мы рассмотрели некоторые методы визуализации и важные алгоритмы машинного обучения. Однако я расскажу о некоторых примерах этих алгоритмов машинного обучения в следующей статье.

Оставайтесь на связи и наслаждайтесь чтением!