Как подключить PySpark и Kaggle в Google Colab

Недавно мы рассказывали, что такое 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()

Скачиваем датасет Kaggle

Многие Data Scientsist’ы работают с датасетами Kaggle — онлайн-площадке для соревнований по машинному обучению как в рамках конкурсов, так и для личных исследований. Обычно датасеты с Kaggle скачиваются напрямую на компьютер. Потом их загружают либо в Google Colab, либо в Google Drive. Причём если они загружаются с Drive, то придётся также их подгружать в Colab и вводить код доступа. Оба метода достаточно долгие, особенно если файлы большого размера. Поэтому рекомендуется загружать файлы напрямую с Kaggle в Colab через Kaggle API [1].

Для этого, прежде всего необходимо создать аккаунт Kaggle. А затем в настройках аккаунта нужно создать API Token. Рисунок ниже показывает соответствующий раздел. После этого скачается файл kaggle.json, который содержит ваш личный код доступа, поэтому им не стоит делиться со сторонними лицами.

Раздел в настройках Kaggle с созданием токена
Создание личного API Token

Далее требуется загрузить 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 команду, как это показано на рисунке ниже.

Вкладка для копирования API-команды на странице Kaggle
Копирование API command

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

!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 в Москве.

 
Источники
  1. https://github.com/Kaggle/kaggle-api
Поиск по сайту