Как работать с числовыми данными наборов RDD в Apache Spark

Spark, фреймворк, Data Science, датафрейм, RDD

В прошлый раз мы говорили про источники структурированных данных в Spark. Сегодня продолжим разговор про наборы RDD и рассмотрим на практических примерах особенности выполнения основных числовых операций с этими структурами данных.

Какие существуют числовые операции над наборами RDD: основные виды

Набор RDD (Resilient Distributed Dataset) представляет собой неизменяемую коллекцию объектов данных из строк произвольной длины. Они могут содержать как текстовые данные, так и числовые – наборы чисел, которые поддерживают следующие операции:

  • нахождение общего числа элементов в наборе RDD;
  • нахождение среднего значения по элементам;
  • вычисление общей суммы элементов набора данных;
  • нахождение минимального и максимального значений;
  • вычисление дисперсии и стандартного отклонения.

Как все эти операции осуществляются на практике, мы подробно рассмотрим далее.

Основные виды операций с числовыми данными в наборах RDD

Методы выполнения числовых операции с RDD в Apache Spark поддерживаются модулем pyspark.sql.functions. Поэтому прежде всего его необходимо импортировать:

from pyspark.sql.functions import*

Для создания набора данных RDD используется метод parallelize():

my_RDD = sc.parallelize([1,3,7,9,5,4,6,8,999])

Чтобы подсчитать количество элементов в наборе, используется метод count():

my_RDD = sc.parallelize([1,3,7,9,5,4,6,8,999])
my_RDD.count()###9

Из примера видно, что метод возвращает число-счетчик, которое соответствует количеству элементов в наборе данных, начиная с 1. Для расчета суммы элементов используется метод sum():

my_RDD.sum() ###1042

Для поиска среднего значения можно использовать классическое деление суммы на количество элементов:

my_RDD.sum() / my_RDD.count() ###115.7777777

Однако, благодаря тому, что модуль pyspark.sql имеет в своем арсенале метод mean(), задача существенно упрощается. «Под капотом» метода mean() содержится счетчик количества элементов и их сумма для вычисления среднего значения элементов:

my_RDD.mean() ###115.777777777765

Стоит отметить, что при использовании встроенного метода mean() точность результата выше, чем при использовании «ручных» вычислений. Это говорит о том, что метод mean()  работает гораздо эффективнее, чем «ручные вычисления».

В наборе данных RDD, который состоит из числовых данных, существует также возможность нахождения минимального и максимального значений с помощью методов min() и max() соответственно:

my_RDD.min() ###1
my_RDD.max() ###999

Бывают случаи, когда необходимо вычислить аномальные значения (outlier values) в наборе RDD во избежание некорректной работы алгоритмов машинного обучения. Для этого прежде всего необходимо вычислить дисперсию значений (variance) и их стандартное отклонение (standard deviation). Для вычисления дисперсии используется метод variance():

my_RDD.variance() ### 97515.72839506173

Метод stdev() применяется для вычисления стандартного отклонения:

my_RDD.stdev() ### 312.27508449292225

В модуле pyspark.sql существует также метод, «под капотом» которого находятся все вышеперечисленные методы. Он возвращает подробную статистику о данных:

my_RDD.stats()
Spark, фреймворк, Data Science, датафрейм, RDD
Статистика числовых данных набора RDD

Для более наглядного использования всех вышеперечисленных методов можно вычислить и удалить аномальные значения в наборе RDD:

import math
from pyspark.sql.functions import*
my_RDD = sc.parallelize([1,3,7,9,5,4,6,8,999])
distanceNumerics = first_RDD.map(lambda string: float(string))
stats = distanceNumerics.stats()
stddev = stats.stdev()
mean = stats.mean()
reasonableDistances = distanceNumerics.filter(lambda x: math.fabs(x - mean) < 3 * stddev)
print (reasonableDistances.collect()) ### [1.0, 3.0, 7.0, 9.0, 5.0, 4.0, 6.0, 8.0]

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

Больше подробностей про применение Apache Spark в проектах анализа больших данных, разработки Big Data приложений и прочих прикладных областях Data Science вы узнаете на практических курсах по Spark в нашем лицензированном учебном центре обучения и повышения квалификации ИТ-специалистов в Москве.

Записаться на курс

Смотреть раcписание

Добавить комментарий

Поиск по сайту