Недавно мы рассказывали, что такое PySpark. Сегодня рассмотрим, как подключить PySpark в Google Colab, а также как скачать датасет из Kaggle прямо в Google Colab, без непосредственной загрузки программ и датасетов на локальный компьютер.
Google Colab
Google Colab — выполняемый документ, который позволяет писать, запускать и делиться своим Python-кодом через Google Drive. Это тот же самый Jupyter Notebook, только блокноты хранятся в Google Drive, а выполняются на сервере.
В отличие от традиционных инструментов разработки, Jupyter Notebook состоит из ячеек, где можно писать код (чаще всего на Python), запускать и сразу же смотреть результаты. Кроме того, ячейки блокнотов могут содержать не только код, но и текст, формулы, рисунки и видео.
Особенную популярность блокноты получили у Data Scientist’ов, поскольку позволяют мгновенно тестировать свои идеи. Но некоторые методы машинного обучения, например, глубокое обучение (Deep Learning), подразумевают большие вычислительные мощности, что не каждый может себе позволить. Поэтому Google Colab также предоставляет GPU, а также TPU — уникальная разработка Google специально для машинного обучения (Machine Learning).
Все вычисления происходят на виртуальной машине с операционной системой Ubuntu. Все команды bash также доступны. Примечательно, в ячейках для запуска команд bash перед самой командой ставится восклицательный знак.
Установка PySpark в Google Colab
PySpark прежде всего требует установки самого Spark и платформы Java. Для нашего примера установим свободный JDK (Java development kit) версии 8. А Apache Spark скачаем версии 2.4.6 с Hadoop. Точная ссылка для скачивания доступна на главной странице Apache Software Foundation на вкладке Downloads. Скачанный архив нужно разархивировать командой tar
. Вот как это выглядит в Colab:
!apt-get install openjdk-8-jdk-headless -qq > /dev/null !wget -q https://downloads.apache.org/spark/spark-2.4.6/spark-2.4.6-bin-hadoop2.7.tgz !tar xf spark-2.4.6-bin-hadoop2.7.tgz
После этого в окружение среды нужно указать пути JAVA_HOME и SPARK_HOME на скачанные программы. Поскольку мы напрямую загрузили Spark, то он находится в директории content. Чтобы их добавить воспользуемся модулем os
, который предоставляет интерфейс для взаимодействия с файловой системой. Вот так будет выглядеть Python-код:
import os os.environ["JAVA_HOME"] = "/usr/lib/jvm/java-8-openjdk-amd64" os.environ["SPARK_HOME"] = "/content/spark-2.4.6-bin-hadoop2.7
Чтобы использовать PySpark как обычную Python-библиотеку, установим findspark
, который сделает за нас остальную работу по инициализации:
!pip install findspark
Вот и все. Осталось только проинициализировать PySpark. Для этого вызывается метод findspark.init()
, а дальше создаём точку входа кластера. Следующий код на Python это иллюстрирует:
import findspark findspark.init()from pyspark.sql import SparkSession spark = SparkSession.builder.master("local[*]").getOrCreate()
- Об инициализации Spark-приложения через SparkSession читайте нашу предыдущую статью
Скачиваем датасет Kaggle
Многие Data Scientsist’ы работают с датасетами Kaggle — онлайн-площадке для соревнований по машинному обучению как в рамках конкурсов, так и для личных исследований. Обычно датасеты с Kaggle скачиваются напрямую на компьютер. Потом их загружают либо в Google Colab, либо в Google Drive. Причём если они загружаются с Drive, то придётся также их подгружать в Colab и вводить код доступа. Оба метода достаточно долгие, особенно если файлы большого размера. Поэтому рекомендуется загружать файлы напрямую с Kaggle в Colab через Kaggle API [1].
Для этого, прежде всего необходимо создать аккаунт Kaggle. А затем в настройках аккаунта нужно создать API Token. Рисунок ниже показывает соответствующий раздел. После этого скачается файл kaggle.json, который содержит ваш личный код доступа, поэтому им не стоит делиться со сторонними лицами.
Далее требуется загрузить kaggle.json в директорию root. Для этого мы создадим этот файл, а потом добавим содержимое файла. Ниже команды в Colab, где вам нужно будет вставить ваши поля с именем и ключом. Также, чтобы обезопасить свой ключ, мы используем команду chmod.
!mkdir /root/.kaggle !touch /root/.kaggle/kaggle.json !echo '{"username":"ИМЯ"}' > /root/.kaggle/kaggle.json !chmod 600 ~/.kaggle/kaggle.json
Осталось только скачать какой-нибудь датасет. Например, можно взять датасет с данными о домах Бруклина с 2003 по 2017 года, который весит 234 Мб. А затем скопировать API команду, как это показано на рисунке ниже.
- Перейти на страницу с датасетом Kaggle.
После вставить скопированную команду в ячейку, не забыв поставить восклицательный знак впереди. Он загрузится в архивированном виде, поэтому также следует его разархивировать.
!kaggle datasets download -d tianhwu/brooklynhomes2003to2017 !unzip -q brooklynhomes2003to2017.zip
А теперь можно приступать к работе со Spark в Google Colab. Так как файл в формате CSV, то мы может его прочитать и вывести первые строчки в Python:
data = spark.read.csv( 'brooklyn_sales_map.csv', inferSchema=True, header=True) data.show(5) +---+--------+--------------------+-----------------------+ +---+--------+--------------------+-----------------------+ | 1| 3| DOWNTOWN-METROTECH| 28 COMMERCIAL CO...| | 2| 3|DOWNTOWN-FULTON F...| 29 COMMERCIAL GA...| | 3| 3| BROOKLYN HEIGHTS| 21 OFFICE BUILDINGS| | 4| 3| MILL BASIN| 22 STORE BUILDINGS| | 5| 3| BROOKLYN HEIGHTS| 26 OTHER HOTELS| +---+--------+--------------------+-----------------------+
После выхода из Google Colab состояние обнулится — исчезнет все созданное и загруженное, поэтому при повторном использовании придется снова запустить все ячейки.
В следующей статье рассмотрим пример выполнения SQL-операций в PySpark на этом же датасете. А ещё больше подробностей о работе с PySpark и Google Colab вы узнаете на специализированном курсе «Анализ данных с Apache Spark» в нашем лицензированном учебном центре обучения и повышения квалификации разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве.