spark快速大数据分析笔记-2

Spark快速大数据分析第三章-笔记
本章介绍Spark对数据的核心抽象--弹性分布式数据集RDD,其实就是分布式的元素集合。在Spark中,对数据的所有操作不外呼创建RDD,转化已有RDD以及调用RDD操作进行求值。Spark会自动将RDD中的数据分发到集群上,并将操作并行化执行。
RDD基础
Spark中的RDD就是一个不可变的分布式对象集合。每个RDD都被分为多个分区,这些分区运行在集群中的不同点上。RDD可以包含Python,Java,Scala中任意类型的对象,甚至可以包含用户自定义的对象。
创建RDD的两种方法:读取一个外部数据集,或在驱动器程序里分发驱动器程序中的对象集合(比方说list和set)。
RDD支持的两种类型的操作:转化操作(transformation)和行动操作(action)。转化操作会由一个RDD生成一个新的RDD;行动操作会对RDD计算出一个结果,并把结果返回到驱动程序中,或者把结果存储到外部存储系统(如HDFS)中。
转化操作和行动操作的区别在于Spark计算RDD的方式不同,虽然你可以在任何时候定义新的RDD,但是Spark只会惰性计算这些RDD。也就是说,当真的需要计算的时候才会计算。
默认情况下,Spark的RDD会在你每次对它们进行行动操作时重新计算。如果想在多个行动操作中重用同一个RDD,可以使用RDD.persist()让Spark把这个RDD缓存下来。在实际操作中,你会经常用persist()来把数据的一部分读取到内存中,并反复查询这部分数控。
总的来说,每个Spark程序或shell会话都按如下的方式工作。
(1)从外部数据创建输入RDD
(2)使用诸如filter()这样的转化操作对RDD进行转化,以定义新的RDD.
(3)告诉Spark对需要被重用的中间结果RDD执行persist()操作。
(4)使用行动操作(例如count()和first()等)来触发一次并行计算,Spark会对计算进行优化后再执行。
cache()与使用默认存储级别调用persist()是一样的。
创建RDD。
创建RDD最简单的方式就是把程序中一个已有的集合传给SparkContext的parallelize()方法。比方说
Python中的parallelize()方法
line=sc.parallelize(["pandas","i like pandas"])
JAVA中的parallelize()方法
JavaRDD<String> lines = sc.parallelize(Arrays.asList("pandas","i like pandas"));
不过,更常用的方式是从外部存储中读取数据来创建RDD。比方说使用方法textFile().
Python版本的textFile()方法
line = sc.textFile("/path/to/README.md")
Java版本的textFile()方法
JavaRDD<String> lines = sc.textFile("/path/to/READ.md")
RDD操作
转化操作:会返回一个新的RDD作为操作的结果。假设我们想从日志文件log.txt中找出其中的错误消息。
Python实现filter()的转化操作
inputRDD = sc.textFile("log.txt")
errorsRDD= inputRDD.filter(lambda x:"error" in x)
JAVA实现filter()的转化操作
JavaRDD<String> inputRDD = sc.textFile("log.txt");
JavaRDD<String> errorsRDD = inputRDD.filter(new Function<String,Boolean>(){
  public Boolean call(String x){
  return x.contains("error");
  }
});
注意:filter()操作会返回一个全新的RDD,不会改变已有的inputRDD中的数据。inputRDD在后面的程序中还可以继续使用。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值