Spark快速大数据分析--笔记(1)

1. Spark中组件简介
    Spark SQL 结构化数据:操作结构化数据的程序包,通过SQL或Hive SQL查询数据
    Spark Streaming 实时计算:对实时数据进行流式计算,提供了操作数据流的API。与Spark Core中的RDD API高度对应
    Spark MLlib 机器学习:提供多种机器学习算法,包括分类、回归、聚类、协同过滤等
    Spark GraghX 图计算:扩展了Spark的RDD API,能用来创建一个顶点和边都包含任意属性的有向图,以及一些常用图算法
2. RDD
    弹性分布式数据集(Resilient Distributed Dataset, 简称RDD),及分布式的元素集合
3. 创建RDD的方式
    读取外部数据集
    在驱动器程序中对一个集合进行并行化,及将一个已有集合传给SparkContext的parallelize(List)方法,常使用于开发原型和测试
4. RDD支持两种类型的操作
    转换操作(transformation):由一个RDD生产一个新的RDD,如filter(),结果返回值是RDD
    行动操作(action):对RDD计算出一个结果 如first(),并把结果返回到驱动器,或把结果存储到外部存储系统(如 HDFS),结果返回值是其它类型
5. RDD转换操作和行动操作的区别
    操作的区别在于Spark计算RDD的方式不同,Spark只会惰性计算RDD,它们只有第一次在一个行动操作中用到时,才会真正计算,在调用行动操作之前Spark不会开始计算
6. 缓存RDD
    Spark的RDD会在每次对它们使用行动操作时进行重新计算,可使用RDD.persist()或RDD.cache()让Spark把这个RDD缓存下来
7. RDD的“弹性”
    在任何时候都能进行重算是为什么把RDD描述为“弹性”的原因。当保存RDD数据的一台机器失败时,Spark还可以使用这种特性来重算出丢掉的分区,这一过程对用户完全透明
8. Spark程序编写步骤
    从外部数据创建出输入RDD
    使用诸如filter()这样的转化操作对RDD进行转化,以定义新的RDD
    告诉Spark对需要被重用的中间结果RDD执行persist()缓存操作
    使用行动操作(例如count()、first()等)来触发一次并行计算,Spark会对计算进行优化后再执行
9. Spark用谱系图来记录不同RDD之间的依赖关系,也可以依照谱系图在持久化的RDD丢失部分数据时恢复所丢失的数据
10. 常用转换操作
    map() 将函数应用于RDD中的每个元素,将返回值构成新的RDD
    flatMap() 将函数应用于RDD中的每个元素,将返回的迭代器的所有内容构成新的RDD。通常用来切分单词
    filter() 返回一个由通过传给filter()的函数的元素组成的RDD。筛选、过滤
    distinct() 去重
    sample(withReplacement, fraction[seed]) 对RDD采样, 以及是否替换
    union() 生成一个包含两个RDD中所有元素的RDD, 示例:rdd.union(otherRDD)
    intersection() 求两个RDD共同的元素的RDD 示例: rdd.intersection(otherRDD)
    subtract() 移除一个RDD中的内容(例如移除训练数据)示例: rdd.subtract(otherRDD)
    cartesian() 与另一个RDD的笛卡尔积 示例: rdd.cartesian(otherRDD)
11. 常用行动操作
    collect() 返回RDD中的所有元素 示例:rdd.collect()
    count() RDD中的元素个数 示例:rdd.count()
    countByValue() 各元素在RDD中出现的次数 示例:rdd.countByValue()
    take(num) 从RDD中返回num个元素 示例:rdd.take(2)
    top(num) 从RDD中返回最前面的num个元素 示例:rdd.top(2)
    takeOrdered(num)(ordering) 从RDD中按照提供的顺序返回最前面的num个元素 示例:rdd.takeOrdered(2)(myOrdering)
    takeSample(withReplacement, num, [seed]) 从RDD中返回任意一些元素 示例:rdd.takeSample(false, 1)
    reduce(func) 并行整合RDD中的所有数据 示例:rdd.reduce((x, y) => x + y)
    fold(zero)(func) 和reduce()一样,但是需要初始值 rdd.fold(0)((x, y) => x + y)
    aggregate(zeroValue)(seq0p, comb0p) 和reduce()相似,但是通常返回不同类型的函数 rdd.aggregate((0, 0 ))(
                                                                                                            (x, y) => (x._1 + y, x._2 + 1), 
                                                                                                            (x, y)(x._1 + y._1, x._2 + y._2)
                                                                                                        )
    foreach(func) 对RDD中的每个元素使用给定的函数 rdd.foreach(func)

12. Pair RDD的转化操作(以键值对集合{(1, 2), (3, 4), (3, 6)}为例)
    reduceByKey(func) 合并具有相同键的值 rdd.reduceByKey((x, y) => x + y)  结果:{(1, 2), (3, 10)}
    groupByKey() 对据用相同键的值进行分组 rdd.groupByKey() 结果:{(1, [2]), (3, [4, 6])}
    combineByKey(createCombiner, mergeValue, mergeCombiners, partitioner) 使用不同的返回类型合并具有相同键的值
    mapValues(func) 对pair RDD中的每个值应用一个函数而不改变键 rdd.mapValues(x => x + 1) 结果:{(1, 3), (3, 5), (3, 7)}
    flatMapValues(func) 对pair RDD中的每个值应用一个返回迭代器的函数,然后对返回的每个元素都生成一个对应原键的键值对记录。通常用于符号化 rdd.flatMapValues(x => (x to 5))
                                                            结果:{(1, 2), (1, 3), (1, 4), (1, 5), (3, 4), (3, 5)}
    keys() 返回一个仅包含键的RDD rdd.keys() 结果: {1, 3, 3}
    values() 返回一个仅包含值的RDD rdd.values() 结果: {2, 4, 6}
    sortByKey() 返回一个根据键排序的RDD rdd.sortByKey() 结果:{(1, 2), (3, 4), (3, 6)}

13. Pair RDD的行动操作(以键值对集合{(1, 2), (3, 4), (3, 6)}为例)
    countByKey() 对每个键对应的元素分别计数,及相同键的个数 rdd.countByKey() 结果:{(1, 1), (3, 2)}
    collectAsMap() 将结果以映射表的形式返回,以便查询 rdd.collectAsMap() 结果:Map{(1, 2), (3, 4), (3, 6)}
    lookup(key) 返回给定键对应的所有值 rdd.lookup(3) 结果:[4, 6]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值