Spark基础知识

[译]Spark基础知识

本文章译自http://spark.apache.org/docs/latest/sql-programming-guide.html#overview
Overview
Spark SQL是Spark中的一个模块,为了进行结构化数据处理。不像Spark中其他的RDD的API,
由SparkSQL提供的接口,为Spark提供了更多关于正在执行的计算和数据的结构的信息。内在的,SparkSQL使用附加的信息去执行额外的优化。有数种方式可以和SparkSQL交互,包括SQL和DataSet ApI两种方法。当计算一个结果时,相同的执行进程被使用。独立于你即将表达计算的API或者语言。这种统一的方式意味着开发者可以容易的来回切换不同的API,提供最自然方式去表示一个给出的转换操作。

SQL
当从另外一种编程语言中运行Sql语句时,结果将会以DataSet/DataFrame返回

DataSet and DataFrames
一个DataSet就是一个分布式的数据,DataSet是在Spark 1.6之后新加的一个接口,这个接口继承了RDDS的优势(strong typing,强大的lambda函数表达式功能)并且具有Spark SQL优化执行引擎的优势。一个DataSet能够从JVM对象中构造得到,并且可以使用函数的转换操作(map,flatMap,filter)。DataSet API在scala和java中均可用。Python和R暂时不支持这个DataSet。

一个DataFrame是一个由指定列组成的DataSet。在概念上,它和关系型数据库相同或者在R/Python中的数据框架(data frame)相同,但是在引擎方面具有更加丰富的优化性能。DataFrame的结构化有着广泛的来源,诸如:hive中结构化的数据文件,表。外部的数据库或者是已存在的RDDs。DataFrame API在Scala和Java,Python,R语言中均可使用。在Scala和java中,一个DataFrame代表的是行的DataSet。在Scala API中,DataFrame仅仅是DataSet[Row]的类型代名词。
然而,在java API中,用户需要使用DataSet去表示DataFrame

must not contain source root

每个Spark应用都由一个驱动器程序(Driver Program)来发起集群上的各种并行操作。驱动器程序包含应用的main函数,并且定义了集群上的分布式数据集,而且还有对分布式数据集应用了相关操作。
驱动器程序通过一个SparkContext对象来访问Spark。这个对象代表对计算集群的一个连接。

在Spark中,对数据的所有操作不外乎创建RDD,转化已有RDD以及调用RDD操作进行求值。spark进行的幕后操作是:将RDD中的数据分发到集群上,并将操作并行化执行。

猜你喜欢

转载自blog.csdn.net/liu16659/article/details/81189138