📜  Apache Spark 与 Scala – 弹性分布式数据集

📅  最后修改于: 2021-10-27 06:35:52             🧑  作者: Mango

在现代世界中,我们每天都在处理庞大的数据集。数据的增长速度甚至超过处理速度。对如此大的数据执行计算通常是通过使用分布式系统来实现的。分布式系统由集群(节点/联网计算机)组成,这些集群并行运行进程并在需要时相互通信。

Apache Spark是用于大规模数据处理的统一分析引擎。它提供Java、Scala、 Python和 R 中的高级 API,以及支持通用执行图的优化引擎。这套丰富的功能和库支持更高级别的工具,例如用于 SQL 和结构化数据处理的 Spark SQL、用于机器学习的 MLlib、用于图形处理的 GraphX 以及用于增量计算和流处理的结构化流。在本文中,我们将使用 Scala 学习 Apache spark(版本 2.x)。

一些基本概念:

  1. RDD(弹性分布式数据集) ——它是一个不可变的分布式对象集合。在 RDD 的情况下,数据集是主要部分,它被划分为逻辑分区。
  2. 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