Изучение фреймов данных, наборов данных, RDD и Google Colab

Ежедневно производится 2,5 квинтиллиона байтов данных. С такими данными необходимы новые технологии для анализа и выполнения аналитики и машинного обучения. Большие данные не могут идеально поместиться в дисковое хранилище или даже в память одного компьютера, поэтому в таких сценариях вам придется обратиться к распределенным вычислениям. Это включает распространение обработки таких данных на несколько компьютеров. Самая большая проблема при работе с такими данными - это отсутствие опыта анализа больших данных (из-за новизны), хранения данных, а также анализа и запроса данных. В этой статье мы рассмотрим технологию, которая решает эти проблемы.

Системы, которые обрабатывают большие объемы данных распределенным образом

Самыми популярными технологиями распределенной обработки данных являются Apache Hadoop и Apache Spark. Apache Hadoop позволяет работать с данными в распределенной среде. Это происходит в кластере компьютеров. Его можно масштабировать до тысяч компьютеров.

Apache Spark

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

Приложения Spark управляются SparkContext. SparkContext подключается к диспетчеру кластера. В Spark есть несколько менеджеров кластеров, включая собственный автономный менеджер кластеров, Mesos или YARN. Менеджеры кластера выделяют ресурсы различным приложениям Spark.

Исполнители на узлах - это процессы, которые выполняют вычисления и хранят данные для вашего приложения. Следовательно, исполнитель - это процесс, который запускается для приложения на рабочем узле, он запускает задачи и хранит данные в памяти или на дисковом хранилище между ними. Рабочий узел - это любой узел, который может запускать код приложения в кластере. У каждого приложения есть свои исполнители. Задачи отправляются исполнителю с помощью SparkContext. У каждого приложения есть собственная программа-исполнитель, поэтому приложения изолированы друг от друга.

Задача - это единица работы, которая будет отправлена ​​одному исполнителю. Параллельное вычисление, включающее несколько задач, называется заданием.

Зачем использовать Spark

Вот несколько причин, по которым вам стоит подумать об использовании Spark:

  • Скорость. Благодаря вычислениям в памяти Spark в 100 раз быстрее Hadoop.
  • Простота использования. Spark можно использовать на Java, Scala, Python, R или SQL.
  • Работает везде. Spark может работать в Hadoop, Apache Mesos, Kubernetes или даже в облаке.

Представления данных Apache Spark

В Apache Spark есть три основных представления данных:

  • Устойчивые распределенные наборы данных (RDD)
  • Фреймы данных
  • Наборы данных

Устойчивые распределенные наборы данных (RDD) - это отказоустойчивый набор элементов, с которыми можно работать параллельно. При возникновении неисправности RDD может автоматически восстановиться. Это хороший выбор, когда необходимы низкоуровневые преобразования наборов данных или при работе с неструктурированными данными, такими как мультимедийные или текстовые потоки.

Создание RDD

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

Устойчивость RDD

В Spark вы можете повысить производительность своего приложения, сохраняя или кэшируя набор данных. После этого вычисление будет сохранено в памяти при первом вычислении. В последовательных запросах этот элемент будет получен из памяти и больше не вычисляться. Кэш отказоустойчив, и любой потерянный раздел пересчитывается с использованием преобразований, которые его создали.

RDD Операции

В Spark есть два основных типа операций: преобразования и действия. Преобразования создают новый набор данных из существующего, например, когда операция map применяется к набору данных. Действия возвращают значение после выполнения вычисления в наборе данных, например, метод reduce.

Преобразования искры

Преобразования в Spark ленивы. Это означает, что они
не вычисляют свои результаты сразу. Преобразования вычисляются только тогда, когда действие требует возврата результата. Вот пара преобразований, которые можно выполнить в Apache Spark:

  • map(func) Возвращает новый распределенный набор данных, полученный в результате передачи каждого элемента через функцию.
  • filter(func) Вернуть новый набор данных, сформированный путем выбора элементов, которые возвращают истину при определенном условии.
  • union(otherDataset)Возвращает новый набор данных, который представляет собой объединение двух наборов данных.

Искровые действия

Давайте теперь посмотрим на пару действий, которые вы можете вызвать в Apache Spark.

  • collect() - вернуть все элементы набора данных в виде массива
  • count() - вернуть количество элементов в наборе данных
  • take(n) - вернуть первые n элементов набора данных
  • first() - вернуть первый элемент в наборе данных

Фреймы данных Spark

Spark DataFrame - это неизменяемый распределенный набор данных, очень похожий на Pandas DataFrame. Одним из основных преимуществ Spark DataFrame является то, что к нему можно обращаться, как если бы это была таблица SQL.

Использование и установка

Процесс настройки Spark может быть довольно пугающим. Наиболее рекомендуемый способ - использовать образ докера или платформу, например Databricks. Бесплатная версия сообщества Databricks вполне достаточно. Вы также можете настроить его на Google Colab или на своем локальном компьютере для практики. Это не имеет смысла, если вы работаете с большими данными, потому что они не масштабируются. Для реальных приложений вы бы предпочли использовать облачные решения, такие как Databricks или Amazon Web Services, потому что они могут масштабироваться.

Работать с Databricks просто, поскольку все зависимости Spark уже установлены. Если вы настраиваете Spark самостоятельно, первое, что вам нужно настроить, - это Java Stallation. Это обязательная зависимость.

Настройка Spark в Google Colab

Чтобы настроить Spark в Google Colab, вам сначала необходимо загрузить Java и сам Spark. Затем вы распакуйте Spark и установите findspark. Этот пакет гарантирует, что Spark можно импортировать в вашу среду Google Colab.

Следующим шагом будет создание пути для Java и Spark. Это позволит виртуальной машине в Google Colab найти эти пакеты.

Наконец, вы импортируете findspark и сделаете Spark импортируемым.

Теперь ваша установка Spark готова к использованию. Вы можете попробовать импортировать его. Первый шаг в каждом приложении Spark по созданию Spark.

Вы можете создать RDD из следующего списка:

Теперь запуск rdd вас ничего не застрахует, потому что, как мы уже говорили ранее, преобразования Spark ленивы. Чтобы увидеть результат, вы должны применить такое действие, как collect().

Настройка Apache Spark на локальном компьютере

Самый безболезненный способ настроить Apache на локальном компьютере - это использовать образ докера. Поэтому первым шагом будет загрузка докера на ваш Mac, Ubuntu или Windows компьютер. Docker позволяет нам легко запускать приложения, настраивая все переменные среды, конфигурации и зависимости.

После установки Docker остается только загрузить образ Spark, предоставленный Jupyter. -p 8888:8888 это означает, что порт 8888 контейнера Docker будет сопоставлен с портом 8888 вашего компьютера, таким образом вы сможете запустить этот контейнер Docker на Jupyter Notebook.

docker run -p 8888:8888 jupyter/pyspark-notebook

Когда вы запускаете эту команду в первый раз, будет загружен док-контейнер Jupyter. Как только это будет сделано, вы получите доступ к записной книжке Jupyter, в которой сможете запускать свои команды Spark. В дальнейшем вы будете запускать ту же команду для доступа к Блокноту, только теперь контейнер больше не будет загружен.

Вы также можете использовать Spark в облаке, создав бесплатную учетную запись в Databrick’s community edition.

Последние мысли

В этой статье мы получили представление о Spark и его ключевых концепциях. Мы также рассмотрели, зачем вам это нужно. Напоследок мы рассмотрели несколько вариантов его установки.

Примечание редактора: Heartbeat - это онлайн-публикация и сообщество, созданное авторами и посвященное предоставлению первоклассных образовательных ресурсов для специалистов по науке о данных, машинному обучению и глубокому обучению. Мы стремимся поддерживать и вдохновлять разработчиков и инженеров из всех слоев общества.

Независимая редакция, Heartbeat спонсируется и публикуется Comet, платформой MLOps, которая позволяет специалистам по обработке данных и группам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим участникам и не продаем рекламу.

Если вы хотите внести свой вклад, отправляйтесь на наш призыв к участникам. Вы также можете подписаться на наши еженедельные информационные бюллетени (Deep Learning Weekly и Comet Newsletter), присоединиться к нам в » «Slack и подписаться на Comet в Twitter и LinkedIn для получения ресурсов, событий и гораздо больше, что поможет вам быстрее и лучше строить модели машинного обучения.