Spark的RDD如何创建(spark,rdd,服务器)

时间:2024-02-22 05:30:35 作者 : 石家庄SEO 分类 : 服务器
  • TAG :

一:Scala

Scala 是一门现代的多范式编程语言,志在以简练、优雅及类型安全的方式来表达常用编程模式。它平滑地集成了面向对象和函数语言的特性。Scala 运行于 Java 平台(JVM,Java 虚拟机),并兼容现有的 Java 程序。

执行以下命令,启动spark-shell:

hadoop@master:/mysoftware/spark-1.6.1$spark-shell

二:弹性分布式数据集(RDD)

1.RDD(Resilient Distributed Dataset,弹性分布式数据集)。

Spark是一个分布式计算框架, 而RDD是其对分布式内存数据的抽象,可以认为RDD就是Spark分布式算法的数据结构。而RDD之上的操作是Spark分布式算法的核心原语,由数据结构和原语设计上层算法。Spark最终会将算法翻译为DAG形式的工作流进行调度,并进行分布式任务的发布。

RDD,它在集群中的多台机器上进行了数据分区,逻辑上可以认为是一个分布式的数组,而数组中每个记录可以是用户自定义的任意数据结构。RDD是Spark的核心数据结构,通过RDD的依赖关系形成Spark的调度顺序,通过对RDD的操作形成了整个Spark程序。

2.RDD的创建方式

2.1 从Hadoop文件系统(或与Hadoop兼容的其他持久化存储系统,如Hive,HBase)输出(HDFS)创建。

2.2 从父RDD转换得到新的RDD

2.3 通过parallelize或makeRDD将单击数据创建为分布式RDD。

scala>vartextFile=sc.textFile("hdfs://192.168.226.129:9000/txt/sparkshell/sparkshell.txt");textFile:org.apache.spark.rdd.RDD[String]=hdfs://192.168.226.129:9000/txt/sparkshell/sparkshell.txtMapPartitionsRDD[1]attextFileat<console>:27scala>vala=sc.parallelize(1to9,3)a:org.apache.spark.rdd.RDD[Int]=ParallelCollectionRDD[6]atparallelizeat<console>:27scala>

3.RDD的两种操作算子: 转换(Transformation),行动(Action)。

3.1 转换(Transformation):延迟计算的,也就是说从一个RDD转换生成另外一个RDD的转换操作不是马上执行,需要等到有Action操作的时候才会真正触发运算。

3.2 行动(Action):Action算子会触发Spark提交作业(Job),并将数据输出Spark系统。

4.RDD的重要内部属性。

4.1 分区列表:通过分区列表可以找到一个RDD中包含的所有分区及其所在地址。

4.2 计算每个分片的函数:通过函数可以对每个数据块进行RDD需要进行的用户自定义函数 运算。

4.3 对父RDD的依赖列表:为了能够回溯带父RDD,为容错等提供支持。

4.4 对 key-value pair数据类型RDD的分区器,控制分区策略和分区数。通过分区函数可以确定数据记录在各个分区和节点上的分配,减少分布不平衡。

4.5 每个数据分区的地址列表(如 HDFS 上的数据块的地址)。
如果数据有副本,则通过地址列表可以获知单个数据块的所有副本地址,为负载均衡和容错提供支持。

4. Spark 计算工作流

途中描述了Spark的输入,运行转换,输出。在运行转换中通过算子对RDD进行转换。算子RDD中定义的函数,可以对RDD中的数据进行转换和操作。

输入:在Spark程序运行中,数据从外部数据空间(eg:HDFS)输入到Spark,数据就进入了Spark运行时数据空间,会转化为Spark中的数据块,通过BlockManager进行管理。

运行:在Spark数据输入形成RDD后,便可以通过变换算子fliter等,对数据操作并将RDD转换为新的RDD,通过行动Action算子,触发Spark提交作业。如果数据需要服用,可以通过Cache算子,将数据缓存到内存。

输出:程序运行结束数据会输出Spark运行时空间,存储到分布式存储中(如saveAsTextFile 输出到 HDFS)或 Scala 数据或集合中( collect 输出到 Scala 集合,count 返回 Scala Int 型数据)。

Spark的RDD如何创建

Spark的核心数据模型是RDD,但RDD是个抽象类,具体由各子类实现,如MappedRDD,ShuffledRDD等子类。Spark将常用的大数据操作都转换成为RDD的子类。

对其一些基本操作的使用:

scala>3*7res0:Int=21scala>vartextFile=sc.textFile("hdfs://192.168.226.129:9000/txt/sparkshell/sparkshell.txt");textFile:org.apache.spark.rdd.RDD[String]=hdfs://192.168.226.129:9000/txt/sparkshell/sparkshell.txtMapPartitionsRDD[1]attextFileat<console>:27scala>textFile.count()res1:Long=3scala>textFile.first()res2:String=1 sparkscala>textFile.filter(line=>line.contains("berg")).count()res3:Long=1scala>textFile.filter(line=>line.contains("bergs")).count()res4:Long=0scala>textFile.map(line=>line.split("").size).reduce((a,b)=>if(a>b)aelseb)res5:Int=1scala>textFile.map(line=>line.split("\t").size).reduce((a,b)=>if(a>b)aelseb)res6:Int=2
 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:Spark的RDD如何创建的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:spark创建RDD的方式有哪些下一篇:

14 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18