Spark-core部分知识点

大数据—— Spark Core 知识点整理 1. Spark 和 Hadoop 相比有什么优势 运行速度快: Spark拥有DAG执行引擎,支持在内存中对数据进行迭代计算。官方提供的数据表明,如果数据由磁盘读取,速度是Hadoop MapReduce的10倍以上,如果数据从内存中读取,速度可以高达100多倍。 适用场景广泛: 大数据分析统计,实时数据处理,图计算及机器学习 易用性: 编写简单,支持80种以上的高级算子,支持多种语言,数据源丰富,可部署在多种集群中 容错性高: ... 阅读详情

Spark

WordCount

package com.bigdata

import org.apache.spark.{SparkConf, SparkContext}

object WordCount {
  def main(args: Array[String]): Unit = {

    //创建上下文对象
    val conf = new SparkConf().setMaster("local[*]").setAppName("WordCount")
    val sc = new SparkContext(conf)

    //读取数据
    val inputRDD = sc.textFile("hdfs://192.168.40.131:9000/datas/wc.txt")

    //分析数据
    val resultRDD = inputRDD.flatMap(_.split(" "))
      .map((_, 1))
      .reduceByKey(_ + _)

    //数据存储
    resultRDD.foreach(println)
    resultRDD.saveAsTextFile("hdfs://192.168.40.131:9000/out_datas/")
  }
}

  1. 创建上下文对象
  2. 数据处理
    1. 读取数据
    2. 分析数据
    3. 存储数据

排序

  1. sortByKey(),参数:ascending :true 升序,false 降序
  2. sortby(),参数 1:指定排序字段,参数 2:ascending :true 升序,false 降序
  3. top(n):默认降序,参数:取前n个

案例:

package com.bigdata

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object SparkTopKey {
  def main(args: Array[String]): Unit = {
    //创建上下文对象
    val conf = new SparkConf().setMaster("local[*]").setAppName("SparkTopKey")
    val sc = new SparkContext(conf)

    //读取数据
    val inputRdd = sc.textFile("hdfs://192.168.40.131:9000/datas/wc.txt")

    //分析数据,将数据进行排序(降序)
    val resultRDD = inputRdd.flatMap(_.split(" "))
      .map((_, 1))
      .reduceByKey(_ + _)
      .sortBy(_._2, false)
      .take(3)
      
    //打印
    resultRDD.foreach(println)

  }
}

Spark应用提交

#spark/bin/目录下
spark-submit

# Usage: spark-submit [options] <app jar | python file> [app arguments]

options参数:

  1. 基本参数

在这里插入图片描述

  1. Driver Program 相关参数

在这里插入图片描述

  1. Executor 相关参数

在这里插入图片描述

案例:

package bigdata

import org.apache.spark.{SparkConf, SparkContext}

object SparkSubmit {
  def main(args: Array[String]): Unit = {

    if (args.length < 2){
      println("Usage: SparkSubmit <input> <output> ......")
      System.exit(1)
    }

    //创建上下文对象
    val conf = new SparkConf().setAppName("WordCount")
    val sc = new SparkContext(conf)

    //读取数据
    val inputRDD = sc.textFile(args(0))

    //分析数据
    val resultRDD = inputRDD.flatMap(_.split(" "))
      .map((_, 1))
      .reduceByKey(_ + _)

    //数据存储
    resultRDD.foreach(println)
    resultRDD.saveAsTextFile(args(1))
  }
}
  1. 命令行指定master
  2. 命令行指定输入输出路径

提交代码:

spark-submit \
--master local[2] \
--class bigdata.SparkSubmit \
file:///root/spark_jars/spark_scala-1.0-SNAPSHOT.jar \
hdfs://192.168.40.131:9000/user/spark/datas/WordCount.txt hdfs://192.168.40.131:9000/user/spark/output_data/
  1. –master :指定master
  2. –class :第一个参数:指定全类名,第二个参数:指定jar路径,第三个参数:输入路径,第四个参数:输出路径

注意:当jar在hdfs上时,启用本地模式可能存在错误

CORE

  1. 弹性数据集:RDD
  2. 共享变量:Shared Variables
    1. 累加器
    2. 广播变量

RDD创建

  1. 本地集合创建(Scala中集合对象)数据存储到RDD中(主要用与测试)

  2. 本地文件系统数据

    如:HDFS、LocalFS、kafak等

本地集合创建代码:

package bigdata

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
  * Spark 采用并行化的方式构建Scala集合Seq中的数据为RDD
  */

object RDD_establish {

  def main(args: Array[String]): Unit = {

    //构建SparkContext对象,(模板)
    val sc:SparkContext = {
      // 创建SparkConf对象
      val sparkconf = new SparkConf()
        .setMaster("local[*]")
        .setAppName(this.getClass.getSimpleName.stripSuffix("$"))
      // 传递SparkConf对象,创建实例
      val context = SparkContext.getOrCreate(sparkconf) //有就选取,没有就创建
      // 返回实例对象
      context
    }

    //TODO:创建本地集合
    val seq = Seq(1,2,3,4,5,6,7,8)
    //并行化本地集合,创建RDD
    //两种方式,效果相同,makeRDD底层调用parallelize实现
    val RDD: RDD[Int] = sc.makeRDD(seq,2)
    
    val rdd1 = sc.parallelize(seq,2)
    
    sc.stop()
  }

}

外部存储系统创建代码:

package bigdata

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object RDD_establish {

  def main(args: Array[String]): Unit = {

    //构建SparkContext对象
    val sc:SparkContext = {
      // 创建SparkConf对象
      val sparkconf = new SparkConf()
        .setMaster("local[*]")
        .setAppName(this.getClass.getSimpleName.stripSuffix("$"))
      // 传递SparkConf对象,创建实例
      val context = SparkContext.getOrCreate(sparkconf) //有就选取,没有就创建
      // 返回实例对象
      context
    }

	//外部存储创建,第一个参数:文件路径,第二个:分区数
	//可以指定文件名称,可以指定文件目录,可以使用通配符
    val rdd = sc.textFile("",2)
    
    //读取小文件数据
    //返回K-V形式数据,K:文件路径 V:数据
    /**
      * Read a directory of text files from HDFS, a local file system (available on all nodes), or any
      * Hadoop-supported file system URI. Each file is read as a single record and returned in a
      * key-value pair, where the key is the path of each file, the value is the content of each file.
      *
      * <p> For example, if you have the following files:
      * {{{
      *   hdfs://a-hdfs-path/part-00000
      *   hdfs://a-hdfs-path/part-00001
      *   ...
      *   hdfs://a-hdfs-path/part-nnnnn
      * }}}
      *
      * Do `val rdd = sparkContext.wholeTextFile("hdfs://a-hdfs-path")`,
      *
      * <p> then `rdd` contains
      * {{{
      *   (a-hdfs-path/part-00000, its content)
      *   (a-hdfs-path/part-00001, its content)
      *   ...
      *   (a-hdfs-path/part-nnnnn, its content)
      * }}}
      */
    val rdd2: RDD[(String, String)] = sc.wholeTextFiles("", 2)

    sc.stop()
  }

}

分区数目

获取分区的两种方式:

  1. rdd.getNumPartitions
  2. rdd.partitions.length

注:1. 从 HDFS 上加载海量数据时,RDD分区数目为block数目

		2. 从HBase表加载数据,RDD分区数目为Region数目

RDD函数

在这里插入图片描述

1. Transformation

注:所有Transformation函数都是懒惰的,不会立刻执行,需要Action函数触发

算子:

在这里插入图片描述

map(func)

:通过将函数应用于此RDD的所有元素来返回新RDD

//创建数据集
    val rdd = sc.makeRDD(List(1,2,3,4,5,6,7,8),2)

    //将集合中的元素乘2
    //map
    rdd.map(_*2).foreach(println)
filter(func)

:返回判断条件为true的元素

//创建数据集
    val rdd = sc.makeRDD(List(1,2,3,4,5,6,7,8),2)
//filter 偶数
    rdd.filter(_ % 2 == 0).foreach(println)
flatmap(func)

:首先将函数应用于所有元素,再将结果展平,返回新的RDD

//创建数据集
    val rdd = sc.makeRDD(List("hello spark","hello hadoop","with you"))
//flatmap
    rdd.flatMap(_.split(" ")).foreach(println)
mapPartitions(func)

:将函数独立应用在每一个分区内的元素,返回一个新的RDD(函数类型必须是:Iterator[T] => Iterator[U])

//创建数据集
    val rdd = sc.makeRDD(List(1,2,3,4,5,6,7,8),2)
//mapPartitions
    rdd.mapPartitions(
      iter => iter.map(_*2)
    ).foreach(println)
mapPartitionsWithIndex(func)

:功能与mapPartitions相似,但func多了一个参数表示分区索引,因此func类型必须是:(Int, Interator[T]) => Iterator[U]

//创建数据集
    val rdd = sc.makeRDD(List(1,2,3,4,5,6,7,8),2)
//mapPartitionsWithIndex 原数据加上分区号,返回字符串形式
    rdd.mapPartitionsWithIndex(
      (index, iter) => {
        iter.map(_ +" 分区号:"+ index)
      }
    ).foreach(println)
groupBy(func)

:按照函数的返回值进行分组,将相同key对应的值放到一个迭代器中,返回值类型为: RDD[(K, Iterable[T])]

sortBy(func)

:按照函数返回值进行排序,默认升序,ascending:true为升序,false为降序

sample

:抽样,参数 1. withReplacement:true数据又放回的抽取,false不放回抽取;2. fraction:随机抽样出数量;3. seed:指定随机数生 成器种子

randomSplit

:按照指定权重抽样,参数1:权重[Array]集合,总和需为1;参数2:随机数生成种子

unoin

:返回此RDD和另一个的并集,包含两个集合的所有元素

intersection

:返回两个RDD的交集,无重复元素

subtract

:RDD1.subtract(RDD2),返回RDD1独有的元素

distinct

:去除RDD中重复的元素

cartesian

:笛卡尔积

zip

:将两个RDD一一对应的组合成K-V形式的RDD,这里两个RDD的分区及元素数量都要相同,否则报错

coalesce

:缩减分区,不产生shuffle

repartition

:增加分区,产生shuffle

mapValue

:通过将函数应用于K-V类型RDD的Value元素,返回新的RDD

flatmapValue

:首先将函数应用于K-V类型RDD的Value元素,再将结果展平,返回新的RDD

groupByKey

:按K-V类型RDD的K进行分组,将相同Key对应的值放到一个Seq中,返回新的RDD

redyceBykey

:在一个(K,V)的 RDD 上调用,返回一个(K,V)的 RDD,使用指定的 reduce 函数,将相同 key 的值聚合到一起,reduce 任务的个数可以通过第二个可选的参数来设置

foldByKey

:与reduceByKey相似,多了一个参数可以指定初始值

aggregateByKey

:参数:(zeroValue:U,[partitioner: Partitioner]) (seqOp: (U, V) => U,combOp: (U, U) => U)

:指定分区内计算规则,再指定分区间计算规则

sortByKey

:按照K进行排序

combineByKey

:与aggreateByKey相似,第一个参数不同,第一个参数将数据的第一个值进行结构转换作为初始值

join

:在类型为(K,V)和(K,W)的 RDD 上调用,返回一个相同 key 对应的所有元素对在 一起的(K,(V,W))的 RDD

cogroup

:在类型为(K,V)和(K,W)的 RDD 上调用,返回一个(K,(Iterable,Iterable))类 型的 RDD

partitionBy:

:对RDD进行重新分区,默认使用new org.apache.spark.HashPartitioner(2)分区规则

2. Action

注:所有Action函数立即执行

算子:

在这里插入图片描述

reduce

:对RDD内所有元素进行聚合,先聚合分区内,再聚合分区间

collect

:以数组的形式返回数据集的所有元素

aggregate

:与aggregateByKey相似

fold

:与foldByKey相似

first

:取出RDD中第一个元素

take

:取出指定数量的RDD的前N个元素

forEach

:在数据集的每一个元素上,运行函数 func 进行更新。

takeOrdered(n)

:返回该 RDD 排序后的前 n 个元素组成的数组

collectAsMap

:将K-V类型的RDD转换为Map

count

:返回 RDD 中元素的个数

max、min、sum、mean、stdev:

:最大值、最小值、总和、平均值、标准差

Keys、values

:获取K-V类型RDD的所有K值、获取K-V类型RDD的所有V值

countByKey

:统计K-V类型RDD所有的K出现的次数,返回collections.map类型

countByValue

:统计RDD中元素出现的次数,底层将数据转换为value =>(value,null)的形式再调用countByKey,返回collections.map类型

saveAsTextFile

:将数据集的元素以 textfile 的形式保存到 HDFS 文件系统或者其他支持的文件系统, 对于每个元素,Spark 将会调用 toString 方法,将它装换为文件中的文本

saveAsSequenceFile(path)

:将数据集中的元素以 Hadoop sequencefile 的格式保存到指定的目录下,可以使 HDFS 或者其他 Hadoop 支持的文件系统。

saveAsObjectFile(path)

:用于将 RDD 中的元素序列化成对象,存储到文件中。

自定义分区

要实现自定义的分区器,你需要继承 org.apache.spark.Partitioner 类并实现下面三个 方法。

(1)numPartitions: Int:返回创建出来的分区数。

(2)getPartition(key: Any): Int:返回给定键的分区编号(0 到 numPartitions-1)。

(3)equals():Java 判断相等性的标准方法。这个方法的实现非常重要,Spark 需要用这个 方法来检查你的分区器对象是否和其他分区器实例相同,这样 Spark 才可以判断两个 RDD 的分区方式是否相同。

数据读取和保存

  1. Text文件
    1. 读取:textFile
    2. 保存:saveAsTextFile
  2. json文件
    1. 导入:import scala.util.parsing.json.JSON
    2. 读取文件:val json = textFile
    3. 解析:json.map(JSON.parseFull)
  3. Sequence文件
    1. 读取:sc.sequenceFile[Int,Int]("file:///opt/module/spark/seqFile")
    2. 保存:saveAsSequenceFile("file:///opt/module/spark/seqFile")
  4. 对象文件
    1. 读取:sc.objectFile[(Int)]("file:///opt/module/spark/objectFile")
    2. 保存:saveAsObjectFile("file:///opt/module/spark/objectFile")

文件系统数据读取

  1. Mysql

    支持通过 Java JDBC 访问关系型数据库。需要通过 JdbcRDD 进行,示例如下:

    (1)添加依赖

    <dependency>
     <groupId>mysql</groupId>
     <artifactId>mysql-connector-java</artifactId>
     <version>5.1.27</version>
    </dependency>
    

    (2)Mysql 读取:

    package com.atguigu
    import java.sql.DriverManager
    import org.apache.spark.rdd.JdbcRDD
    import org.apache.spark.{SparkConf, SparkContext}
    
    object MysqlRDD {
    	def main(args: Array[String]): Unit = {
     		//1.创建 spark 配置信息
     		val sparkConf: SparkConf = new
    			SparkConf().setMaster("local[*]").setAppName("JdbcRDD")
     		//2.创建 SparkContext
     		val sc = new SparkContext(sparkConf)
     		//3.定义连接 mysql 的参数
     		val driver = "com.mysql.jdbc.Driver"
     		val url = "jdbc:mysql://hadoop102:3306/rdd"
     		val userName = "root"
     		val passWd = "000000"
     		//创建 JdbcRDD
     		val rdd = new JdbcRDD(sc, () => {
     			Class.forName(driver)
     			DriverManager.getConnection(url, userName, passWd)
     			},
     			"select * from `rddtable` where `id`>=?;",
     			1,
     			10,
     			1,
     			r => (r.getInt(1), r.getString(2))
     		)
            //打印最后结果
     		println(rdd.count())
     		rdd.foreach(println)
     		sc.stop()
    	}
    }
    
    

    Mysql 写入:

    def main(args: Array[String]) {
     val sparkConf = new 			SparkConf().setMaster("local[2]").setAppName("HBaseApp")
     val sc = new SparkContext(sparkConf)
     val data = sc.parallelize(List("Female", "Male","Female"))
     data.foreachPartition(insertData)
    }
    def insertData(iterator: Iterator[String]): Unit = {
    Class.forName ("com.mysql.jdbc.Driver").newInstance()
     val conn = java.sql.DriverManager.getConnection("jdbc:mysql://master01:3306/rdd", "root",
    "hive")
     iterator.foreach(data => {
     val ps = conn.prepareStatement("insert into rddtable(name) values (?)")
     ps.setString(1, data)
     ps.executeUpdate()
     })
    }
    
    

累加器

  1. 获取系统累加器

    val sumAcc = sc.longAccumulator(name="sum")

  2. 使用累加器

    sumAcc.add(num)

  3. 获取累加器结果

    sumAcc.value

自定义累加器

package bigdata

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.util.AccumulatorV2

import scala.collection.mutable

object Acc {
  def main(args: Array[String]): Unit = {

    val sc:SparkContext = {
      val conf:SparkConf = new SparkConf()
        .setMaster("local[*]")
        .setAppName(this.getClass.getSimpleName.stripSuffix("$"))

      SparkContext.getOrCreate(conf)
    }
    val rdd = sc.makeRDD(List("hello","word","spark","hello"))

    //创建累加器对象
    val wcAcc = new MyAccumulator()

    //向Spark进行注册
    sc.register(wcAcc, "wordCountAcc")

    rdd.foreach(
      word => {
        wcAcc.add(word)
      }
    )

    //获取累加器结果
    println(wcAcc.value)
  }

  /**
    * 自定义累加器
    * IN:累加器输入的数据类型
    * OUT:累加器返回的数据类型
    */
  class MyAccumulator extends AccumulatorV2[String,mutable.Map[String,Long]]{

    private var wcMap = mutable.Map[String,Long]()

    //判断是否为初始状态
    override def isZero: Boolean = {
      wcMap.isEmpty
    }

    //赋值累加器
    override def copy(): AccumulatorV2[String, mutable.Map[String, Long]] = {
      new MyAccumulator()
    }

    //重置累加器
    override def reset(): Unit = {
      wcMap.clear()
    }

    //获取累加器需要计算的值
    override def add(word: String): Unit = {
      val newCnt = wcMap.getOrElse(word,0L) + 1
      wcMap.update(word,newCnt)
    }

    //合并多个累加器
    override def merge(other: AccumulatorV2[String, mutable.Map[String, Long]]): Unit = {
      val map1 = this.wcMap
      val map2 = other.value

      map2.foreach{
        case (word ,count) => {
          val newCount = map1.getOrElse(word,0L) + count
          map1.update(word,newCount)
        }
      }
    }

    //累加器结果
    override def value: mutable.Map[String, Long] = {
      wcMap
    }
  }
}

Spark源码和调优简介 Spark Core 作者:calvinrzluo,腾讯 IEG 后台开发工程师本文基于 Spark 2.4.4 版本的源码,试图分析其 Core 模块的部分实现原理,其中如有错误,请指正。为了简化论述,将部... 阅读详情

相关推荐

SPAD 单光子雪崩二极管

SPAD,全称为,是一种高灵敏度的光电探测器件,能够在非常低的光照水平下检测单个光子。SPAD在工作时,当一个光子被探测器吸收后,能够触发一个雪崩效应,产生一个可以被检测到的电信号。

qq_42786033的博客 1万+

大数据常见错误解决方案(转载)

1、用./bin/spark-shell启动spark时遇到异常:java.net.BindException: Can't assign requested address: Service 'sparkDriver' failed after 16 retries! 解决方法:add export SPARK_LOCAL_IP="127.0.0.1" to spark-env....

defang0693的博客 3418

[ADS]单端电感和差分电感的感值和Q值计算公式

单端电感和差分电感的感值和Q值计算公式

乾巽的博客 1万+

Spark Core 的核心使用

Spark 程序核心概念 * 首先,官网的这张图很好的描述了一个Spark 应用程序的结构,一个Spark应用程序由一个Driver端和多个Executor组成,多个task 以多线程的形式运行在Executor中。 * Driver端: Driver负责运行程序的main()方法,负责将代码发送到各个Executor去执行,然后取回结果,Driver端也是以Executor方式运行,可以...

Realoyou的博客 1400

N5105核显直通PVE:从黑屏到HDMI输出的完整指南

PCI直通能让虚拟机独占物理设备,但核显直通远没有独显那么轻松。Intel核显与CPU、显示输出链路的强耦合使UEFI引导、GOP驱动、驱动签名等环节都成了黑屏陷阱。在PVE虚拟化环境中,通过IOMMU开启、vfio-pci绑定、OVMF固件和Q35机型配合,可以绕过KVM检测,让Windows虚拟机正确驱动核显,从HDMI口输出画面,并解锁Intel Quick Sync硬解能力。这种方案尤其适合N5105等低功耗迷你主机,可作为客厅HTPC、本地视频硬解或依赖硬件加速的轻量工作台。本文基于N5105平台

weixin_31082403的博客 372

京东联盟h5st(3.1)加密参数逆向实战与反爬对抗策略

本文详细解析了京东联盟h5st(3.1)加密参数的逆向分析与实战破解过程。通过接口分析定位关键加密函数,拆解h5st结构并还原其基于SHA256和HMAC-SHA256的加密逻辑,最终使用Python集成JavaScript环境成功复现加密算法,并分享了应对反爬的频率限制、IP封禁及算法升级等对抗策略。

weixin_29246195的博客 1738

Spark submit参数调优

在开发完Spark作业之后,就该为作业配置合适的资源了。Spark的资源参数,基本都可以在spark-submit命令中作为参数设置。很多Spark初学者,通常不知道该设置哪些必要的参数,以及如何设置这些参数,最后就只能胡乱设置,甚至压根儿不设置。资源参数设置的不合理,可能会导致没有充分利用集群资源,作业运行会极其缓慢;或者设置的资源过大,队列没有足够的资源来提供,进而导致各种异常。总之,无论是哪...

qq_32445015的博客 506

手把手教你用Synopsys AHB VIP搭建验证环境:从SINGLE到WRAP16的完整波形分析与避坑指南

本文详细介绍了如何使用Synopsys AHB VIP搭建验证环境,从基础配置到复杂波形调试实战。重点解析了AHB协议中各种Burst类型的地址计算机制,包括INCR和WRAP类型,并提供了实际案例和避坑指南,帮助工程师快速掌握验证技巧。

weixin_42552716的博客 413

spark基本概念——spark Core

spark优势: 速度快(相比hadoop) 迭代式、交互式 弹性数据集,容错 支持有向无环图的数据优化 (相比于mapreduce:mapreduce自身不支持交互,要支持交互,需要hive等,有交互接口)   spark的几种运行模式: 批处理:用于大规模的额分布式数据处理 流方式:spark流用于传送和处理实时数据 交互方式:常用于处理在内存中的大块数据,较低的延迟性 (sp...

qq_42068900的博客 2080

Linux 隐藏进程

这种方式属于DKoM(Direct Kernel Object Manipulation)攻击方式了,即直接内核对象操作技术。关于第一种hook方式可以参考上一篇文章。最后推荐一个rootkit工具。

chi's blog 2049

π0.5部署实战(一) ------ 在Thor上使用NVFP4量化

此篇文章是pi05模型在thor上部署系列文章的第一篇.主要介绍如何对pi05 2.6B LLM(Gemma)使用nvfp4进行量化.所有操作使用开源工具可以先参考进行环境的准备和安装,在上完成以下操作.

happyAnger6的专栏 400

sortBy和sortByKey函数详解

在很多应用场景都需要对结果数据进行排序,Spark中有时也不例外。在Spark中存在两种对RDD进行排序的函数,分别是 sortBy和sortByKey函数。sortBy是对标准的RDD进行排序,它是从Spark 0.9.0之后才引入的(可以参见SPARK-1063)。而sortByKey函数是对PairRDD进行排序,也就是有Key和Value的RDD。下面将分别对这两个函数的实现以及使用进行说...

jiayunfei521的博客 1964

(五)深入理解蓝牙BLE之“Beacon包格式详解”

蓝牙Beacon格式详解 本文重点在结合Bluetooth官网spec和几个例子来使beacon帧格式更加容易被理解。 广播帧格式: 首先beacon是蓝牙BLE广播包的一种,蓝牙广播帧格式如下: PS:其实BLE数据帧除了报头字段和数据字段定义与广播帧不同之外,前导/接入地址/长度/校验格式均相同。 广播帧数据字段格式: 数据字段最长为37个字节:6个字节的广播设备地址 + 31个字节广播数据。 广播数据的格式如下:AD Structure1 +AD Structure2 + .....

1万+

最新重生之我在优快云学习spark,搞懂这些直接来阿里入职

GraphX(图计算)和(流计算),并且支持在一个应用中同时使用这些组件。Spark提供了Core、SQL、Streaming、MLlib、GraphX等技术组件,可以一站式地完成大数据领域的离线批处理、SQL交互式查询、流式实时计算,机器学习、图计算等常见的任务从这可以看出来Spark也是一个具备完整生态圈的技术框架,它不是一个人在战斗。4.随处运行。

2401_84167046的博客 519

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Spark Core

从 shuffle 的角度:reduceByKey 和 groupByKey 都存在 shuffle 的操作,但是 reduceByKey可以在 shuffle 前对分区内相同 key 的数据进行预聚合(combine)功能,这样会减少落盘的数据量,而 groupByKey 只是进行分组,不存在数据量减少的问题,reduceByKey 性能比较高。该操作用于排序数据。将待处理的数据以分区为单位发送到计算节点进行处理,这里的处理是指可以进行任意的处理,哪怕是过滤数据,在处理时同时可以获取当前分区索引。

2302_82289522的博客 1157

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Spark core

1.RDD 特性与核心属性:RDD 是 Spark 中基本的数据处理模型,具有弹性(存储、容错、计算、分片方面)、分布式、数据集、数据抽象、不可变、可分区并行计算等特性。其核心属性包括分区列表用于并行计算、分区计算函数对每个分区进行计算、RDD 之间的依赖关系用于组合计算模型、分区器(可选,用于 K - V 类型数据分区)和首选位置(可选,根据节点状态选择计算位置)。2.核心概念:Executor 是工作节点的 JVM 进程,利用 Core 计算,可配置数量、内存和 CPU 核数。

2401_85482551的博客 1028

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

spark Core

Apache Spark作为当今最为流行的大数据处理框架之一,其核心组件Spark Core为整个Spark生态系统提供了基础的分布式计算能力。本文将深入探讨Spark Core的核心概念、架构、编程模型以及其在实际应用中的优势与场景。在Spark Core中,对RDD的操作分为转换和行动两类。首先从文本文件创建RDD,然后通过flatMap将每行文本拆分成单词,接着使用map为每个单词创建键值对,最后通过reduceByKey对相同单词的计数进行累加,完成词频统计。四、Spark Core编程模型。

2501_90679485的博客 955

Spark-Core Spark核心部分

spark核心部分总结 spark-core spark简介 分布式计算引擎(大数据计算框架),用来替代MapReduce 速度是MapReduce的一百倍(官方),实际检测大概十倍左右 spark会尽量将数据放在内存中进行计算(cache) 使用DAG有向无环图 spark可以将多个MapReduce串联在一起 粗粒度资源调度,spark在任务执行之前会将所需要的所有资源全部申请下来 spark生态体系 spark-sql 将sql转换成RDD进行计算 MLlib .

qq_41261170的博客 410

spark-core相关知识点

摘要 四个部分, 难度递增 Spark基础 RDD基础 job的生成和提交 常用算子, 重点在于Action和Transformation算子的区分, 以及是否触发shuffle 概述 Spark特点 速度快. 以Hadoop的MapReduce为基准, Spark比MR快100倍 易用. 提供了Java, Scala, Python的API, Python和Shell的交互式界面, 80多...

IAmListening的博客 436

spark core相关知识点

弹性分布式数据集,spark中最基本的数据抽象代表一个不可变、可分区、元素可并行计算的集合Resilient:RDD中的数据可存储在内存或者硬盘中Distributed: 数据是分布式的,可用于分布式计算Dataset: 数据集合,用于存放数据。

qq_18628605的博客 1017

Spark Core 解析:RDD

引言 Spark Core是Spark的核心部分,是Spark SQL,Spark Streaming,Spark MLlib等等其他模块的基础, Spark Core提供了开发分布式应用的脚手架,使得其他模块或应用的开发者不必关心复杂的分布式计算如何实现,只需使用Spark Core提供的分布式数据结构RDD及丰富的算子API,以类似开发单机应用的方式来进行开发。 图中最下面那个就是Spark...

Liam's Blog (AI & BigData) 1789

Spark-Core核心算子

Spark-Core中1、数据源获取。2、转换算子。3、行动算子

lydms的博客 1万+

Spark学习笔记一:Spark.core

一、Spark.core Spark生态圈以Spark.core为核心,从HDFS、Hbase等持久层读取数据,以MESS、YARN和自身有的Standalone为资源管理器调度Job完成Spark应用程序的计算。这些应用程序可以来源于不同的Spark组件。如Spark shell 或spark commit 的批处理、Spark streaming的实时处理应用,Spark sql的查询,ML...

DanyYan的博客 790
上一篇: MapReduce知识点(4)
下一篇: Scala基础部分知识点
_知多少_
博客等级 码龄7年 273粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值