ОБУЧЕНИЕ МАШИНАМ 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