• Spark学习笔记


    1.    什么是RDD?

    Resilient Distributed Dataset弹性分布式数据集,能够横跨集群所有节点进行并行计算的分区元素的集合。

    2.    Spark中两种类型的共享变量

    一是广播变量(broadcast variables),用来在所有节点内存中缓存一个值;另外一种是累加器(accumulators),其只能执行添加操作(add)。

    3.    spark-submit命令

    spark-submit --master yarn --name StreamingTest  --driver-class-path ./conf --class com.sgcc.hj.StreamingTest --executor-memory 1G SparkTest.jar

    --name 任务名称

    --master 运行模式(local, yarn等)

    --jar 额外运行的JAR包

    --drive-class-path 设置classpath

    --class main函数所在类

    --executor-memory 每个executor占用最大内存

    4.    并行集合

    通过一个已有的集合,通过调用SparkContext的parallelize实现分布式数据集。

    5.    flatMap和map的区别

    map将函数用于rdd中的每个元素,将返回值构建成新的rdd。

    flatMap将函数应用于rdd中的每个元素,将返回值迭代器中所有元素构建成新的rdd,实际上就是先map后flat(扁平化)。

    val str = sc.parallelize(List("I am a good student", "u can heat me", "but I like it"))

    str.map(x => x.split(" ")).collect

    Array[Array[String]] = Array(Array(I, am, a, good, student), Array(u, can, heat, me), Array(but, I, like, it))

    str.flatMap(x => x.split(" ")).collect

    Array[String] = Array(I, am, a, good, student, u, can, heat, me, but, I, like, it)

    6.    RDD中的两类操作

    第一类是转换(transformation),从已经存在的数据集创建新的数据集;第二类是动作(action),在数据集上进行计算,返回一个值到驱动程序。例如map是转换,reduce是动作。

    7.    cache()和persist()的区别

    cache方法最终还是调用persist方法,persist可以传入参数设定缓存级别,默认的是MEMORY_ONLY,两个方法都可以通过unpersist方法取消缓存。

    8.    Spark删除数据

    Spark会自动监控每个节点缓存的使用情况,利用最近最少使用原则删除老旧的数据。如果想手动删除,使用unpersist方法。

    9.    广播变量

    缓存一个只读的变量在每台机器上,而不是任务上,通过调用SparkContext.broadcast方法将变量广播,调用时则通过value方法访问。

    val bv = sc.broadcast(Array(1, 2, 3))

    bv.value

    10.              累加器

    通过SparkContext.accumulator(v)方法从初始变量v中创建,运行在集群上时可以通过add方法或者+=操作符实现加值,调用时通过value方法访问。

    val acc = sc.accumulatror(0, “acc1”)

    sc.parallelized(Array(1, 2, 3, 4)).foreach(x => acc  += x)

    acc.value

    11.              Spark streaming中几点注意点

    一旦一个context已经启动,就不能有新的流算子建立并添加到context中。

    一旦一个context已经停止,就不能重新启动。

    在JVM中,同一时间只能有一个streaming处于活跃状态。

    在StreamingContext上调用stop()方法,也会光比SparkContext对象,如果只想关闭StreamingContext,设置stop()可选参数为false。

    一个SparkContext对象可以重复利用去创建对各StreamingContext对象,前提是之前的StreamingContext已经关闭,并且SparkContext没有关闭。

    12.              离散流

    离散流(DStream)是Spark Streaming中最基本的抽象,代表一个连续的数据流,由一系列RDD组成,每个RDD都包含确定时间间隔内的数据。

    任务对DStream的操作都转换成了对DStreams中隐含的RDD的操作,多个DStream输入就需要对应多个Receiver进行接受。

    Receiver作为一个长期运行的任务,其运行在executor上,并占有一个核(如果是本地运行,则对应一个线程),分配Streaming应用的核是很关键的。

    13.              如何将RDD转换为SchemaRDD

    一是利用反射推断模式,Spark的Scala接口可以自动将RDD转换为SchemaRDD,代码如下:

    Case class Person(name: String, age: Int)

    val people = sc.textFile(“people.txt”).map(_.split(“ ”)).map(p => Person(p(0), p(1)))

    people.registerTempTable(“people”)

    val p = sqlContext.sql(“SELECT name , age FROM people)

    p.map(t => “Name: ” + t(0)).collect().foreach(println)

    当样本类不能提前确定,一个SchemaRDD可以通过三个步骤来创建,从原来的RDD创建一个行的RDD,创建一个StructType表示的模式与第一步创建的RDD的行结构相匹配,在行RDD上通过applySchema方法应用模式。

  • 相关阅读:
    IE8上传插件jquery-form.js上传请求参数设置type为post失效问题
    路径参数汉字兼容问题
    vue-cli2移动端适配
    事件委托原生、jQuery实现
    new Date()在移动端的问题
    create-react-app配置less
    删除左右两边空格
    日期转换
    Git 常用命令
    单页面应用
  • 原文地址:https://www.cnblogs.com/kevin19900306/p/5690802.html
Copyright © 2020-2023  润新知