弹性式分布数据集RDD——Pyspark基础 (二)

连载中:http://ihoge.cn/tags/pyspark/

title: 弹性式分布数据集RDD——Pyspark基础 (二)
date: 2018-04-15 17:59:21
comments: true
categories:
- Spark
tags:

- pyspark

RDD的内部运行方式

RDD不仅是一组不可变的JVM(Java虚拟机)对象的分布集,而且是Spark的核心,可以让任务执行高速运算。

RDD将跟踪(计入日记)应用于每个快的所有转换,以加速计算速度,并在发生错误和部分数据丢失时提供回退(容错机制)。

RDD采用并行的运行方式,也就是每个转换操作并行执行,从而提高速度。
RDD有两种并行操作:
- 转换操作(返回指向新的RDD的指针)
- 动作操作(在运行计算后向驱动程序返回值)

数据集的转换通常是惰性的,这也意味着任何转换操作仅在调用数据集上的操作时才执行。该延迟执行会产生风多的精细查询:针对性能进行优化查询。这种优化始于Spark的DAGScheduler——面向阶段的调度器。DAGScheduler负责Stage级的调度详见:Spark运行原理剖析

由于具有单独的RDD转换和动作,DAGScheduler可以在查询中执行优化。包括但不限于避免shuffle数据(最耗费资源的任务)

创建RDD

方式一: 用.parallelize(...)集合(元素list或array)

data = sc.parallelize([('a',1),('b',2),('c',3),('d',5),('e',5)])

方式二: 读入外部文件

  • 支持多文件系统中读取:如NTFS、FAT、HFS+(Mac OS Extended),或者如HDFS、S3、Cassandra这类的分布式文件系统,还有其他类文件系统。
  • 指出多种数据格式:如文本、parquet、JSON、Hive tables(Hive表)以及使用JDBC驱动程序可读取的关系数据库中的数据。(注意:Spark可以自动处理压缩数据集)

��Tip1:读取的方式不同,持有对象表达方式也不同。从文件中读取的数据表示为MapPartitionsRDD;使用集合方法的数据表示为ParallelCollectionRDD

��**Tip2:**RDD是无schema的数据结构(和DataFrame不同),所以我们几乎可以混用任何数据结构:tuple、dict、list和spark等都能支持。如果对数据集使用.collect()方法,将把RDD对所有元素返回给驱动程序,驱动程序将其序列化成了一个列表。

data_from_file = sc.textFile("hdfs://master:9000/pydata/VS14MORT.txt.gz",4) # 这里表示4个分区
def extractInformation(row):
    import re
    import numpy as np

    selected_indices = [
         2,4,5,6,7,9,10,11,12,13,14,15,16,17,18,
         19,21,22,23,24,25,27,28,29,30,32,33,34,
         36,37,38,39,40,41,42,43,44,45,46,47,48,
         49,50,51,52,53,54,55,56,58,60,61,62,
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值