在现代世界中,我们每天都在处理庞大的数据集。数据的增长速度甚至超过处理速度。对如此大的数据执行计算通常是通过使用分布式系统来实现的。分布式系统由集群(节点/联网计算机)组成,这些集群并行运行进程并在需要时相互通信。
Apache Spark是用于大规模数据处理的统一分析引擎。它提供Java、Scala、 Python和 R 中的高级 API,以及支持通用执行图的优化引擎。这套丰富的功能和库支持更高级别的工具,例如用于 SQL 和结构化数据处理的 Spark SQL、用于机器学习的 MLlib、用于图形处理的 GraphX 以及用于增量计算和流处理的结构化流。在本文中,我们将使用 Scala 学习 Apache spark(版本 2.x)。
一些基本概念:
- RDD(弹性分布式数据集) ——它是一个不可变的分布式对象集合。在 RDD 的情况下,数据集是主要部分,它被划分为逻辑分区。
- SparkSession –使用 Dataset 和 DataFrame API 对 Spark 进行编程的入口点。
我们将仅出于演示目的使用 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)
输出 :
Number of partitons in intRDD : 3
First element in intRDD : 1
String from intRDD : 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Printing intRDD:
1
2
3
4
5
6
7
8
9
10