Spark基础篇(四) - RDD的创建和算子使用

本文回顾了SparkContext和SparkConf,并详细介绍了RDD的两种创建方式:通过parallelize方法和外部数据集。重点讲解了parallelize方法创建RDD的实践,包括task数量的由来。此外,还讨论了RDD的算子,如map、filter和mapValues,并提到了自定义top排序的隐式转换。最后,提出了几个测试题目供读者实践。
摘要由CSDN通过智能技术生成

一、SparkContext、SparkConf内容回顾

二、RDD的两种创建方式

三、RDD的两种操作

四、自行完成如下测试

一、SparkContext、SparkConf内容回顾

1、SparkContext、SparkConf、spark-shell中一些常用参数介绍

2、开发程序前首先要构建SparkContext,构建SparkContext前要先构建SparkConf,在SparkConf中设置与spark程序相关的:appName、Master;

 //如下就是SparkConf的链式编程
    val sparkconf = new SparkConf().setAppName("SparkContextApp").setMaster("local[2]")
    //创建SparkContext前需要创建一个SparkConf
    val sc = new SparkContext(sparkconf)

3、spark-submit提交的时候不要使用硬编码的方式(比如每天运行的spark应用程序,如何通过作业名称知道它跑的是哪个应用程序,正常是在shell中通过时间把他拼接上去)

4、每一个Spark应用程序中都有一个SparkContext,在Spark使用过程中提供给我们的shell脚本就是在$SPARK_HOME/bin目录下的spark-shell,spark-shell就是一个spark application

5、Spark shell的启动过程中会给我们创建一个SparkContext,它的别名叫sc

6、spark-shell、spark-sql底层都是通过spark-submit的方式进行提交的。

二、RDD的两种创建方式

  • Spark revolves around the concept of a resilient distributed dataset (RDD), which is a fault-tolerant collection of elements that can be operated on in parallel. There are two ways to create RDDs: parallelizing an existing collection in your driver program, or referencing a dataset in an external storage system, such as a shared filesystem, HDFS, HBase, or any data source offering a Hadoop InputFormat.

2.1、通过parallelize方法创建RDD

  • parallelize是在SparkContext.scala中的方法:
  def parallelize[T: ClassTag](
      seq: Seq[T],
      numSlices: Int = defaultParallelism): RDD[T] = withScope {
   
    assertNotStopped()
    new ParallelCollectionRDD[T](this, seq, numSlices, Map[Int, Seq[String]]())
  }

parallelize方法介绍:
两个参数:第一个参数是sequence的集合,第二个参数numslices:Int类型,它有个默认的值,
传递使用的时候这个参数是可以不用传递的;所以parallelize方法只需要传一个seq就行了。
  • parallelize方法介绍:Distribute a local Scala collection to form an RDD, 将一个本地的scala集合转换成RDD.
在spark-shell中实操:

1、定义一个数组:
scala> val data = Array(1,2,3,4,5)
data: Array[Int] = Array(1, 2, 3, 4, 5)

2、parallelize的方式:
scala> val distData = sc.parallelize(data)
distData: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at parallelize at :26

3、scala> distData.collect
res0: Array[Int] = Array(1, 2, 3, 4, 5)
使用collect进行触发,观察UI界面,发现只有2个task:

观察UI界面,发现task的数量是2,问题:2的由来?

1、once created, the distributed dataset can be operated on in parallel. (一旦被创建能够以并行化的方式被操作)

2、one important parameter for parallel collections is the number of partitions to cut the dataset into. Spark will run one task for each partition of the cluster.

  • 我们设置的Partition数量会将我们的数据集拆分成number of partiiton.

3、Spark will run one task for each partition of the cluster(Spark将会运行一个task对应一个Partition),我们设置了5个partition,所以是5个task.
在Spark中,partition的数量默认就是等于task的数量,partition=task

scala> val data = Array(1,2,3,4,5)
data: Array[Int] = Array(1, 2, 3, 4, 5)

scala> val distData=sc.parallelize(data,5)
distData: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[1] at parallelize at <console>:26

scala> distData.collect
res2: Array[Int] = Array(1, 2, 3, 4, 5)

在这里插入图片描述
Typically(典型的), you want 2-4 partitions for each CPU in your cluster. why?

  • 如果一个core对应一个task,一个core设置2-4个partition,避免:一个作业跑完另一个接着跑,作业量大小不一导致资源产生过多的浪费。

Spark会尝试设置分区数基于你的集群,比如我们处理HDFS的文件(文件>BlockSize(128M)和文件大小>BlockSize(128M)。Note:task数量如果多的话,输出的小文件也会很多;就会涉及到小文件的合并了。

2.2、RDD的第二种创建方式External Datasets(外部数据集)

1、Spark can create distributed datasets from any storage source supported by Hadoop, including your system, HDFS, Cassandra, HBase, Amazon S3, Spark supports text files, and any hadoop inputFormat.

  • Spark能够创建分布式的数据集从任何支持Hadoop的存储源,比如你的操作系统,HDFS/Cassandra/HBase/Amazon S3,这些文件系统上的文件都能直接使用Spark创建,支持格式:文本格式、sequencefile

Spark支不支持读取ORC格式的文件,当然是支持的

2、Text file can be created using SparkContext’s textFIle method. this method takes the URI for the file(either a local path on the machine, or a hdfs 😕/,s3n://,etc URI) and reads it

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值