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 SparkSession import org.apache.spark.sql.SparkSession // Creating SparkSession object val sparkSession = SparkSession.builder() .appName( "My First Spark Application" ) .master( "local" ).getOrCreate() // Loading sparkContext val 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 partitions println(s "Number of partitons in intRDD : ${intRDD.partitions.size}" ) // Printing first element of RDD println(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