Apache Spark со Scala - устойчивый распределенный набор данных
В современном мире мы ежедневно имеем дело с огромными наборами данных. Данные растут даже быстрее, чем скорость обработки. Выполнение вычислений на таких больших данных часто достигается с помощью распределенных систем. Распределенная система состоит из кластеров (узлов / сетевых компьютеров), которые запускают процессы параллельно и при необходимости обмениваются данными друг с другом.
Apache Spark - это единый аналитический движок для крупномасштабной обработки данных. Он предоставляет высокоуровневые API-интерфейсы на Java, Scala, Python и R, а также оптимизированный движок, поддерживающий общие графики выполнения. Этот богатый набор функций и библиотек поддерживает инструменты более высокого уровня, такие как Spark SQL для SQL и обработки структурированных данных, MLlib для машинного обучения, GraphX для обработки графов и структурированную потоковую передачу для инкрементных вычислений и потоковой обработки. В этой статье мы будем изучать Apache Spark (версия 2.x) с помощью Scala.
Некоторые основные понятия:
- RDD (Resilient Distributed Dataset) - это неизменяемая распределенная коллекция объектов. В случае RDD набор данных является основной частью и разделен на логические разделы.
- SparkSession - точка входа в программирование Spark с помощью Dataset и DataFrame API.
Мы будем использовать Scala IDE только в демонстрационных целях. Для выполнения приведенного ниже кода требуется специальный компилятор Spark. Перейдите по ссылке, чтобы запустить приведенный ниже код.
Давайте создадим наш первый фрейм данных в Spark.
Scala
// Importing SparkSessionimport org.apache.spark.sql.SparkSession // Creating SparkSession objectval sparkSession = SparkSession.builder() .appName("My First Spark Application") .master("local").getOrCreate() // Loading sparkContextval sparkContext = sparkSession.sparkContext // Creating an RDD val intArray = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) // parallelize method creates partitions, which additionally // takes integer argument to specifies the number of partitions. // Here we are using 3 partitions. val intRDD = sparkContext.parallelize(intArray, 3) // Printing number of partitionsprintln(s"Number of partitons in intRDD : ${intRDD.partitions.size}") // Printing first element of RDDprintln(s"First element in intRDD : ${intRDD.first}") // Creating string from RDD// take(n) function is used to fetch n elements from // RDD and returns an Array.// Then we will convert the Array to string using // mkString function in scala.val strFromRDD = intRDD.take(intRDD.count.toInt).mkString(", ")println(s"String from intRDD : ${strFromRDD}") // Printing contents of RDD// collect function is used to retrieve all the data in an RDD.println("Printing intRDD: ")intRDD.collect().foreach(println) |
Выход :
Количество разделов в intRDD: 3 Первый элемент в intRDD: 1 Строка из intRDD: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 Печать intRDD: 1 2 3 4 5 6 7 8 9 10