最近工做用到Spark,这里记一些本身接触到的Spark基本概念和知识。html
本文连接:http://www.javashuo.com/article/p-xsjvaawz-gw.htmlpython
RDD:在高层,每一个Spark应用包含一个driver程序,它运行用户的主函数,在集群上执行不一样的并行做业。Spark中提供的主要抽象是弹性分布式数据集(resilient distributed dataset, RDD),它是分布在集群节点中的已分区的元素集合,能够被并行处理。RDD从Hadoop文件系统中的文件建立,或者从驱动程序中已有的Scala集建立。用户也能够要求Spark将RDD持久化在内存中,容许它在并行操做中被高效地复用。最后,RDD能够从节点故障中自动恢复。git
Spark SQL:一个用于处理结构化数据的Spark模块。和RDD API不一样,Spark SQL提供的接口会提供给Spark关于数据的结构和计算的更多信息。在内部,Spark SQL使用额外的信息来执行额外优化。有许多方式能够与Spark SQL交互,包含SQL和Dataset API。在进行计算时,不管使用哪一种API/编程语言,都会使用相同的执行引擎。这意味着开发者能够基于数据变换的须要来自由切换不一样的API。sql
Dataset:Dataset是分布式的数据集合。Dataset是Spark 1.6中新加入的接口,提供了RDD的优点(强类型化,应用lambda函数的能力),也提供了Spark SQL的优化执行引擎的优点。Dataset能够由JVM对象构造,而后经过函数变换(map, flatMap, filter等)来操纵。Dataset API在Scala和Java中可用。Python不支持Dataset API,可是因为Python的动态性,已经能够享受许多Dataset API的好处。(例如你能够经过row.columnName的方式天然地访问行中的字段)。R语言的情形与之相似。数据库
DataFrame:DataFrame是一种有列名的Dataset。它在概念上等于关系数据库中的表或者R/Python中的数据帧,可是在底层有更多的优化。DataFrame能够从一个多重源构造,好比:结构化数据文件、Hive中的表、外部数据库或者既有的RDD。DataFrame API在Scala、Java、Python和R中可用。在Scala和Java,DataFrame被表示为多行Dataset。在Scala API中,Dataframe能够简单地表示为Dataset[Row]。而在Java API中,用户须要使用Dataset<Row>来表示Dataframe。apache
TempView:createOrReplaceTempView方法会建立(若是已存在同名视图的话,则替换)一个惰性计算视图,你能够将这个视图视做hive表来使用。除非你将Dataset缓存,不然它不会持久化到内存中。可使用spark.catalog.dropTempView("tempViewName")来删除视图。编程
Caching and Persistence:缓存或持久化是Spark计算的优化技术。 它们有助于保存临时部分结果,以即可以在后续阶段重复使用。 所以,RDD的这些中间结果保存在内存(默认)或固态存储(如磁盘和/或复制)中。api
SparkSession:Spark SQL的入口点。在开发Spark SQL应用时,这是首先要建立的对象之一。缓存
你可使用SparkSession.builder方法来建立SparkSession。session
import org.apache.spark.sql.SparkSession val spark = SparkSession.builder .appName("My Spark Application") // optional and will be autogenerated if not specified .master("local[*]") // only for demo and testing purposes, use spark-submit instead .enableHiveSupport() // self-explanatory, isn't it? .config("spark.sql.warehouse.dir", "target/spark-warehouse") .withExtensions { extensions => extensions.injectResolutionRule { session => ... } extensions.injectOptimizerRule { session => ... } } .getOrCreate
一旦被建立,SparkSession会容许你建立Dataframe(基于RDD或一个Scala Seq等),建立Dataset,方为Saprk SQL服务(例如ExperimentalMethods, ExecutionListenerManager, UDFRegistration),运行SQL查询,载入表以及访问DataFrameReader接口以载入选定格式的Dataset。
你的单个应用中能够有多个SparkSession。常见的用例是让每一个SparkSession保持关系实体在逻辑上分离。
SparkContext: Spark功能的主入口。
RDD: 弹性分布式数据集,见上文。
Broadcast: 能够在task间复用的广播变量。
Accumulator: 只容许增长值的共享变量。
SparkConf: 配置Spark用。
SparkFiles: 访问由做业载入的文件。
StorageLevel: 缓存持久化的级别。
TaskContext: 当前运行的做业的信息(实验性)。
RDDBarrier: 用屏障包装RDD以实现屏障执行。
BarrierTaskContext: 为屏障执行提供额外信息和工具的TaskContext.
BarrierTaskInfo: 与屏障做业有关的信息。
pyspark.sql.SparkSession: Dataframe和Spark SQL功能的主入口点。
pyspark.sql.DataFrame: 按列名分组的分布式数据集合,见上文。
pyspark.sql.Column: Dataframe中的列表达式。
pyspark.sql.Row: Dataframe中的行。
pyspark.sql.GroupedData: 聚合方法, 由 DataFrame.groupBy()返回.
pyspark.sql.DataFrameNaFunctions: 处理丢失数据(null值)的方法。
pyspark.sql.DataFrameStatFunctions: 静态功能方法。
pyspark.sql.functions: 对Dataframe可用的内建函数。
pyspark.sql.types: 可用的数据类型列表、
pyspark.sql.Window: 用于使用Window函数
参考: