Spark基础:创建RDD

文章目录

  • 一、RDD讲述
    • (一)RDD概念
  • 二、RDD例题
    • (一)创建文件
      • 1、准备本地系统文件
      • 2.启动集群
      • 3、上传文件到HDFS
    • (二)启动Spark Shell
  • 三、创建RDD
    • (一)从对象集合创建RDD
      • 1、利用parallelize()方法创建RDD
      • 2、利用makeRDD()方法创建RDD
    • (二)从外部存储创建RDD
      • 1、读取本地系统文件
      • 2、读取HDFS上的文件

一、RDD讲述

(一)RDD概念

  • Spark提供了一种对数据的核心抽象,称为弹性分布式数据集(Resilient Distributed
    Dataset,RDD)。这个数据集的全部或部分可以缓存在内存中,并且可以在多次计算时重用。RDD其实就是一个分布在多个节点上的数据集合。
  • RDD的弹性主要是指当内存不够时,数据可以持久化到磁盘,并且RDD具有高效的容错能力。
    分布式数据集是指一个数据集存储在不同的节点上,每个节点存储数据集的一部分。

(二)RDD主要特征

  • RDD是不可变的,但可以将RDD转换成新的RDD进行操作。
  • RDD是可分区的。RDD由很多分区组成,每个分区对应一个Task任务来执行。
  • 对RDD进行操作,相当于对RDD的每个分区进行操作
  • RDD拥有一系列对分区进行计算的函数,称为算子。
  • RDD之间存在依赖关系,可以实现管道化,避免了中间数据的存储。

二、RDD例题

(一)创建文件

1、准备本地系统文件

  • 在home目录里创建hh.txt

请添加图片描述

  • 写入内容,单词用空格隔开

Spark基础:创建RDD_第1张图片

2.启动集群

  • 【start-all.sh】 【start-dfs.sh】 【start-yarn.sh】

Spark基础:创建RDD_第2张图片

3、上传文件到HDFS

  • 创建目录park

请添加图片描述

  • 将hh.txt上传到HDFS的/park目录里、查看文件内容Spark基础:创建RDD_第3张图片

(二)启动Spark Shell

  • 如果以 spark-shell --master
    spark://master:7077方式启动spark-shell,只能读取HDFS系统上的文件,不能读取本地系统文件,而以spark-shell
    –master=local[*]方式启动spark-shell,既可以读取本地系统文件,加不加file://都可以,还可以访问HDFS系统上的文件,但是必须加上hdfs://master:9000。
  • 执行命令:spark-shell --master=local[*]

Spark基础:创建RDD_第4张图片

三、创建RDD

(一)从对象集合创建RDD

  • Spark可以通过parallelize()或makeRDD()方法将一个对象集合转化为RDD。

1、利用parallelize()方法创建RDD

  • 执行命令:val rdd = sc.parallelize(List(1, 2, 3, 4, 5, 6, 7, 8))

请添加图片描述

2、利用makeRDD()方法创建RDD

  • 执行命令:val rdd = sc.makeRDD(List(1, 2, 3, 4, 5, 6, 7, 8))

请添加图片描述

  • 执行命令:rdd.collect(),显示数据
    请添加图片描述

(二)从外部存储创建RDD

  • Spark的textFile()方法可以读取本地文件系统或外部其他系统中的数据,并创建RDD。不同的是,数据的来源路径不同。

1、读取本地系统文件

  • 执行命令:val rdd = sc.textFile(“file:///home/ff.txt”)

请添加图片描述

  • 执行命令:val lines = rdd.collect(),查看RDD中的内容,保存到常量lines

请添加图片描述

  • 执行命令:lines.foreach(println)、查看结果

Spark基础:创建RDD_第5张图片

2、读取HDFS上的文件

  • 执行命令:val rdd = sc.textFile(“hdfs://master:9000/park/ff.txt”)

请添加图片描述

  • 执行命令:val lines = rdd.collect,查看RDD中的内容

请添加图片描述

  • 获取包含spark的行,执行命令:val sparkLines = rdd.filter((line) =>
    line.contains(“spark”))

请添加图片描述

  • 还要更简单的写法,执行命令:val sparkLines = rdd.filter(_.contains(“spark”))

请添加图片描述

  • 利用遍历算子显示sparkLines内容

请添加图片描述

你可能感兴趣的:(spark,big,data,hdfs)