当前位置: 移动技术网 > IT编程>数据库>其他数据库 > Spark中的一些概念

Spark中的一些概念

2019年01月21日  | 移动技术网IT编程  | 我要评论

最近工作用到spark,这里记一些自己接触到的spark基本概念和知识。

本文链接:

名词

rdd:在高层,每个spark应用包含一个driver程序,它运行用户的主函数,在集群上执行不同的并行作业。spark中提供的主要抽象是弹性分布式数据集(resilient distributed dataset, rdd),它是分布在集群节点中的已分区的元素集合,可以被并行处理。rdd从hadoop文件系统中的文件创建,或者从驱动程序中已有的scala集创建。用户也可以要求spark将rdd持久化在内存中,允许它在并行操作中被高效地复用。最后,rdd可以从节点故障中自动恢复。

spark sql:一个用于处理结构化数据的spark模块。和rdd api不同,spark sql提供的接口会提供给spark关于数据的结构和计算的更多信息。在内部,spark sql使用额外的信息来执行额外优化。有许多方式可以与spark sql交互,包含sql和dataset api。在进行计算时,无论使用哪种api/编程语言,都会使用相同的执行引擎。这意味着开发者可以基于数据变换的需要来自由切换不同的api。

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。

 

tempview:createorreplacetempview方法会创建(如果已存在同名视图的话,则替换)一个惰性计算视图,你可以将这个视图视作hive表来使用。除非你将dataset缓存,否则它不会持久化到内存中。可以使用spark.catalog.droptempview("tempviewname")来删除视图。

caching and persistence:缓存或持久化是spark计算的优化技术。 它们有助于保存临时部分结果,以便可以在后续阶段重复使用。 因此,rdd的这些中间结果保存在内存(默认)或固态存储(如磁盘和/或复制)中。

sparksession:spark sql的入口点。在开发spark sql应用时,这是首先要创建的对象之一。

你可以使用sparksession.builder方法来创建sparksession。

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: 用于使用

 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网