ОБУЧЕНИЕ МАШИНАМ SCALA SPARK

Наука о данных и машинное обучение с помощью Scala и Spark (серия 02/03)

Spark с API Scala

Изобретатели Spark выбрали Scala для написания низкоуровневых модулей. В Науке о данных и машинном обучении с помощью Scala и Spark (Эпизод 01/03) мы рассмотрели основы языка программирования Scala при использовании среды Google Colab. В этой статье мы узнаем об экосистеме Spark и ее высокоуровневом API для пользователей Scala. Как и раньше, мы по-прежнему используем Spark 3.0.0 и Google Colab для отработки некоторых фрагментов кода.

Что такое Apache Spark?

По материалам Apache Spark и Delta Lake Under the Hood

Apache Spark - это единый вычислительный движок и набор библиотек для параллельной обработки данных на компьютерных кластерах. На момент написания этой статьи Spark является наиболее активно разрабатываемым движком с открытым исходным кодом для этой задачи; что делает его де-факто инструментом для любого разработчика или специалиста по данным, интересующегося большими данными. Spark поддерживает несколько широко используемых языков программирования (Python, Java, Scala и R), включает библиотеки для различных задач, от SQL до потоковой передачи и машинного обучения, и работает где угодно, от ноутбука до кластера из тысяч серверов. Это делает систему легкой для начала и масштабирования до обработки больших данных или невероятно большого масштаба.

Я настоятельно рекомендую прочитать краткий справочник Apache Spark и Delta Lake Under the Hood. Это 45-страничный документ с примерами на Scala и API pyspark, который займет не более 30 минут.

Почему машинное обучение с помощью Spark?

Как специалист по данным, мы можем задать вопрос: «Какое значение имеет Spark для задач машинного обучения?» С ростом использования электронных устройств, платформ социальных сетей и развертывания передовых ИТ-систем данные генерируются на невиданном ранее уровне. Кроме того, из-за дешевого хранения данных клиенты с удовольствием собирают большие данные для извлечения значений. Проверенные модели машинного обучения помогают бизнесу лучше понять и разработать стратегию для будущих расширений. Для получения доступа к большим данным Spark де-факто является выбором машинного обучения для обработки огромных объемов собранных данных для построения моделей.

DataFrame API - это наиболее важный высокоуровневый API для машинного обучения. MLlib Spark отказался от поддержки RDD в пользу DataFrame API.

Scala API в Spark

Scala был выбран в качестве основного языка для написания движка Spark. Однако Apache Spark предоставляет высокоуровневые API на Java, Scala, Python и R. В этой статье мы будем использовать Spark 3.0.0.

Ниже приведены команды для получения модулей для Scala и Spark в Google colab.

// Run below commands
import $ivy.`org.apache.spark::spark-sql:3.0.0`
import org.apache.spark.sql._
import $ivy.`sh.almond::ammonite-spark:0.3.0`

Есть две важные абстракции: Spark, Spark Context и Spark Session. Используя следующие строки, мы создаем искровую сессию и контекст.

import org.apache.spark.SparkContext
import org.apache.spark.SparkConf

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

// TIP: Turn off the millions lines of logs
import org.apache.log4j.{Level, Logger}
Logger.getLogger(“org”).setLevel(Level.OFF)
// define spark session
val spark = {
SparkSession.builder()
.master("local[*]")
.getOrCreate()
}
// Define Spark Context
def sc = spark.sparkContext

Spark RDD с помощью Scala

Устойчивые распределенные наборы данных (RDD) - это наиболее распространенная абстракция структуры данных Spark, тесно связанная со Scala. Это очень похоже на встроенную параллельную функцию Scala. Напишем несколько отрывков о RRD на Scala.

// Spark RDD
import scala.util.Random
// Define variable in Scala
val bigRng = scala.util.Random.shuffle(1 to 100000)
// convert Scala variable to spark RDD
val bigPRng = sc.parallelize(bigRng)

Вы можете применить множество операций к bigPRng, он будет работать на Spark.

// calculate the mean of the population
bigPRng.mean
// Find the min of the population
bigPRng.min
// Find the stanndard deviation of the population
bigPRng.popStdev

Применение функции к каждому элементу RDD очень похоже на параллельную map функцию Scala.

// Map function on RDD, similar to Paralell in Scala
val bigPRng2 = bigPRng.map(_ * 2)
// Scala function function to apply on RDD
def div3(x:Int) : Boolean = {val y:Int=(x%3); return(y==0)}
val bigBool = bigPRng2.map(div3(_))

Spark DataFrame API в Scala

В предыдущие разделы мы включили примеры RDD и того, как RDD можно использовать для параллельных вычислений. Еще один популярный API в Spark - Dataframe. Исходя из опыта Data Scientist, возможно, DataFrame API будет иметь больше смысла. Однако есть существенная разница в том, как запускать фреймы данных и фреймы данных pandas работают под капотом.

Фреймы данных Spark могут находиться на нескольких физических машинах, и, следовательно, их вычисления выполняются распределенным образом, в отличие от фреймов данных pandas.

Spark MLlib будет реализован в API DataFrame в будущем.

Давайте изучим некоторые основные приемы Spark DataFrame API, наиболее полезные для задач машинного обучения.

Прочтите Раздел 0 в Google colab о подготовке данных для нижеприведенных фрагментов.

// Read the .txt file
val df_emps = spark.read.option("header", "true").csv(data_dir + "employee.txt")
// print the schema
df_emps.printSchema()
// show top 10 records similar to df.head(10) in pandas
df_emps.show(10, false)

Прочтите вторую таблицу

// Read the .txt file
val df_cr = spark.read.option("header", "true").csv(data_dir + "country_region.txt")
// print the schema
df_cr.printSchema()
// show top 10 records similar to df.head(10) in pandas
df_cr.show(10, false)

Прочтите третью таблицу

// Read the .txt file
val df_dd = spark.read.option("header", "true").csv(data_dir + "dept_div.txt")
// print the schema
df_dd.printSchema()
// show top 10 records similar to df.head(10) in pandas
df_dd.show(10, false)

Слияние - одна из самых распространенных и эффективных операций в Spark по сравнению с pandas.

// Merge all three tables
val df_joined = df_emps.join(df_cr, "region_id").join(df_dd, "department")

Блокнот Google Colab

Я приготовил функциональный блокнот Google colab. Не стесняйтесь использовать ноутбук для практики.

Дополнительные примеры см. В официальной документации Spark.

завершение реалити-проекта

В этом эпизоде ​​мы изучили основы Spark с помощью Scala и рассмотрели ниже ключевые концепции с помощью упражнений.

  • Запуск Scala в Google Colab
  • Основы Spark
  • RDD Spark на Scala
  • API DataFrame от Sparks на Scala

В следующем выпуске мы узнаем о моделях машинного обучения с помощью Spark и Scala с использованием среды выполнения Google Colab.

Литература Литература / Ссылки

Машинное обучение с помощью Scala в Google Colaboratory

Документы Scala - https://docs.scala-lang.org/tour/tour-of-scala.html

Https://www.lynda.com/Scala-tutorials/Scala-Essential-Training-Data-Science/559182-2.html



Https://databricks.com/p/ebook/apache-spark-under-the-hood