zoukankan      html  css  js  c++  java
  • Spark中的一些概念

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

    本文链接:https://www.cnblogs.com/hhelibeb/p/10288915.html

    名词

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

    参考:

    Spark Python API Docs

    Spark SQL Guide

    How does createOrReplaceTempView work in Spark?

    Mastering Apache Spark 2.3.2

    Spark 编程指南

    Spark: Why should we use SparkSession ?

     

  • 相关阅读:
    [NOI2021] 路径交点
    CF1188D Make Equal
    CF1349F1 Slime and Sequences
    CF1067D Computer Game
    Dcat Admin安装
    PHP 中提示undefined index如何解决(多种方法)
    Git 常用命令大全
    项目维护环境部署
    bootstrap-table
    bootstrap-datetimepicker
  • 原文地址:https://www.cnblogs.com/hhelibeb/p/10288915.html
Copyright © 2011-2022 走看看