欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Spark中的一些概念

程序员文章站 2022-04-10 22:14:54
最近工作用到Spark,这里记一些自己接触到的Spark基本概念和知识。 本文链接:https://www.cnblogs.com/hhelibeb/p/10288915.html 名词 RDD:在高层,每个Spark应用包含一个driver程序,它运行用户的主函数,在集群上执行不同的并行作业。Sp ......

最近工作用到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。

Spark中的一些概念

 

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保持关系实体在逻辑上分离。

Spark中的一些概念

 

模块

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函数