Spark Обзор
Согласно официальному сайту, «Apache Spark — это быстрый и общий движок для крупномасштабной обработки данных»
Лучше всего использовать его в кластерной среде, в которой задача или задание обработки данных разделены для быстрого и эффективного выполнения на нескольких компьютерах или узлах. Он утверждает, что программа запускается в 100 раз быстрее, чем платформа Hadoop.
Spark использует объект, называемый RDD (Resilient Distributed Dataset), для обработки и фильтрации данных. Объект RDD предоставляет различные полезные функции для обработки данных распределенным способом. Прелесть Spark в том, что вам не нужно понимать, как он распределяет или распределяет данные по узлам в кластере. Как разработчик, вы сосредотачиваетесь только на написании функции RDD для обработки и преобразования данных. Spark изначально построен с использованием языка Scala. Но вы можете использовать Java, Python или Scala для написания своей программы Spark.
Spark состоит из различных модулей или компонентов, которые можно использовать для своих нужд по обработке данных. Компонентная модель Spark выглядит следующим образом:
Основным компонентом является Spark Core, который использует RDD для обработки (сопоставления и сокращения) данных в распределенной среде. Другие компоненты, созданные на основе Spark Core:
- Spark Stream: используется для анализа потоков данных в реальном времени
- Spark SQL: можно писать запросы на основе SQL, используя контекст Hive для обработки данных
- MLLib: поддержка алгоритмов машинного обучения и инструментов для обучения ваших данных
- GraphX: создание графиков данных и выполнение таких операций, как преобразование и объединение
Настройка среды
Сначала установите JDK 8 и установите переменную среды JAVA_HOME
указывающую на JDK home. Для Python вы можете установить популярные IDE, такие как Enthought Canopy или Anaconda, или вы можете установить базовый Python с веб-сайта python.org . Для Spark загрузите и установите последнюю версию с официального сайта Apache Spark .
После установки установите SPARK_HOME
среды SPARK_HOME
чтобы она указывала на домашнюю папку Spark. Также убедитесь, что переменная PATH указывает на соответствующие папки bin: JAVA_HOME\bin
и SPARK_HOME\bin.
Затем создайте образец набора данных, который мы будем использовать для обработки с использованием Spark. Набор данных будет означать сбор оценок продуктов. Формат данных следующий:
Первый столбец представляет идентификатор заказа, второй столбец — идентификатор продукта, а третий столбец — рейтинги. Он говорит вам рейтинги продуктов как часть каждого заказа. Мы обработаем данные, чтобы узнать общее количество продуктов по каждому рейтингу. Выше приведено лишь небольшое подмножество данных, чтобы вы поняли, как легко обрабатывать в Spark. Возможно, вы захотите загрузить или сгенерировать данные из реальной жизни для реализации аналогичного варианта использования. Сохраните этот файл данных в папке (скажем, /spark/data
). Это может быть папка на ваш выбор.
Взгляд на код
01
02
03
04
05
06
07
08
09
10
11
12
|
from pyspark import SparkConf, SparkContext import collections conf = SparkConf().setMaster( "local" ).setAppName( "Product Ratings" ) sc = SparkContext(conf = conf) rows = sc.textFile( "file:///spark/data/product-ratings-data.py" ) ratings = rows.map(lambda x: x.split()[ 2 ]) output = ratings.countByValue() sortedOutput = collections.OrderedDict(sorted(output.items())) for key, value in sortedOutput.items(): print( "%s %i" % (key, value)) |
Python интегрируется с Spark с помощью модуля pyspark
. Вам понадобятся два основных класса из этого модуля: SparkConf
и SparkContext
. SparkContext
используется для создания объекта RDD. SparkConf
используется для настройки или настройки свойств приложения. В первом разделе указывается, будет ли наша работа Spark использовать кластерную (распределенную) среду или на одной машине. На данный момент мы можем установить его как local
как это основная программа, которую мы запустим, чтобы получить обзор Spark, и, следовательно, нам не нужна распределенная среда. Мы также устанавливаем имя приложения и будем называть его «Basic Spark App». Если вы используете веб-интерфейс для управления заданиями Spark, это имя отображается для вашей работы. Затем вы получаете SparkContext
( sc
) из настроенного объекта SparkConf
.
Загрузите данные
1
|
rows = sc.textFile( "file:///spark/data/product-ratings-data" ) |
Следующий фрагмент кода загружает данные из локальной файловой системы. У нас уже есть файл, который хранится в папке spark/data
. Файл содержит информацию о рейтинге товаров, которую мы будем загружать, чтобы найти общее количество товаров с определенной оценкой. Функция textFile()
используется для загрузки начальных данных из указанного пути к файлу и возвращает объект Spark RDD — rows
. Это основной объект, который мы будем использовать для дальнейшей обработки и преобразования наших данных. Этот объект RDD будет содержать данные в виде записи строки. Каждая строка в файле будет записью или значением в объекте RDD.
Преобразовать данные
1
2
|
ratings = rows.map(lambda x: x.split()[ 2 ]) output = ratings.countByValue() |
Функция map()
использует функцию лямбда (внутреннюю функцию, определенную как лямбда), чтобы разделить строку данных по пробелам и получить третий столбец (индекс начинается с 0, и поэтому 2 становится третьим столбцом). Третий извлеченный столбец — это столбец оценок. Разделение будет выполняться в каждой строке, и полученный результат будет сохранен в новом объекте RDD, который мы называем rating
.
Наши новые ratings
RDD теперь будут иметь рейтинги, как показано ниже:
Теперь, чтобы найти общее количество продуктов для каждого рейтинга, мы будем использовать countByValue()
. Он будет подсчитывать каждый повторный рейтинг и размещать значение счетчика рядом с каждым рейтингом. Окончательный результат будет выглядеть следующим образом.
Вы можете запустить свою программу на Python, используя приложение spark-submit
как показано ниже:
spark-submit product-ratings-data.py
Всего существует три продукта с рейтингом 4, два продукта с рейтингом 3 и один продукт с рейтингом 1 и 2 соответственно. Функция countByValue()
вернет обычный объект коллекции Python, который в конечном итоге может быть повторен для отображения результатов.
Ссылка: | Apache Spark: быстрый старт с Python от нашего партнера JCG Раджива Хати в блоге TECH ORGAN . |