Spark RDD使用详解2--RDD创建方式

转载 2016年06月23日 16:47:36

RDD创建方式

1)从Hadoop文件系统(如HDFS、Hive、HBase)输入创建。
2)从父RDD转换得到新RDD。
3)通过parallelize或makeRDD将单机数据创建为分布式RDD。
4)基于DB(Mysql)、NoSQL(HBase)、S3(SC3)、数据流创建。

从集合创建RDD

  • parallelize

def parallelize[T](seq: Seq[T], numSlices: Int = defaultParallelism)(implicit arg0: ClassTag[T]): RDD[T]

从一个Seq集合创建RDD。

参数1:Seq集合,必须。

参数2:分区数,默认为该Application分配到的资源的CPU核数

scala> var rdd = sc.parallelize(1 to 10)
rdd: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[2] at parallelize at :21
 
scala> rdd.collect
res3: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
 
scala> rdd.partitions.size
res4: Int = 15
 
//设置RDD为3个分区
scala> var rdd2 = sc.parallelize(1 to 10,3)
rdd2: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[3] at parallelize at :21
 
scala> rdd2.collect
res5: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
 
scala> rdd2.partitions.size
res6: Int = 3

  • makeRDD

def makeRDD[T](seq: Seq[T], numSlices: Int = defaultParallelism)(implicit arg0: ClassTag[T]): RDD[T]

这种用法和parallelize完全相同

def makeRDD[T](seq: Seq[(T, Seq[String])])(implicit arg0: ClassTag[T]): RDD[T]

该用法可以指定每一个分区的preferredLocations。

scala> var collect = Seq((1 to 10,Seq("slave007.lxw1234.com","slave002.lxw1234.com")),
(11 to 15,Seq("slave013.lxw1234.com","slave015.lxw1234.com")))
collect: Seq[(scala.collection.immutable.Range.Inclusive, Seq[String])] = List((Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
List(slave007.lxw1234.com, slave002.lxw1234.com)), (Range(11, 12, 13, 14, 15),List(slave013.lxw1234.com, slave015.lxw1234.com)))
 
scala> var rdd = sc.makeRDD(collect)
rdd: org.apache.spark.rdd.RDD[scala.collection.immutable.Range.Inclusive] = ParallelCollectionRDD[6] at makeRDD at :23
 
scala> rdd.partitions.size
res33: Int = 2
 
scala> rdd.preferredLocations(rdd.partitions(0))
res34: Seq[String] = List(slave007.lxw1234.com, slave002.lxw1234.com)
 
scala> rdd.preferredLocations(rdd.partitions(1))
res35: Seq[String] = List(slave013.lxw1234.com, slave015.lxw1234.com)
指定分区的优先位置,对后续的调度优化有帮助。

从外部存储创建RDD

  • textFile

//从hdfs文件创建.

//从hdfs文件创建
scala> var rdd = sc.textFile("hdfs:///tmp/lxw1234/1.txt")
rdd: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[26] at textFile at :21
 
scala> rdd.count
res48: Long = 4
 
//从本地文件创建
scala> var rdd = sc.textFile("file:///etc/hadoop/conf/core-site.xml")
rdd: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[28] at textFile at :21
 
scala> rdd.count
res49: Long = 97  

注意这里的本地文件路径需要在Driver和Executor端存在。

  • 从其他HDFS文件格式创建

hadoopFile

sequenceFile

objectFile

newAPIHadoopFile

  • 从Hadoop接口API创建

hadoopRDD

newAPIHadoopRDD

比如:从HBase创建RDD

scala> import org.apache.hadoop.hbase.{HBaseConfiguration, HTableDescriptor, TableName}
import org.apache.hadoop.hbase.{HBaseConfiguration, HTableDescriptor, TableName}
 
scala> import org.apache.hadoop.hbase.mapreduce.TableInputFormat
import org.apache.hadoop.hbase.mapreduce.TableInputFormat
 
scala> import org.apache.hadoop.hbase.client.HBaseAdmin
import org.apache.hadoop.hbase.client.HBaseAdmin
 
scala> val conf = HBaseConfiguration.create()
scala> conf.set(TableInputFormat.INPUT_TABLE,"lxw1234")
scala> var hbaseRDD = sc.newAPIHadoopRDD(
conf,classOf[org.apache.hadoop.hbase.mapreduce.TableInputFormat],classOf[org.apache.hadoop.hbase.io.ImmutableBytesWritable],classOf[org.apache.hadoop.hbase.client.Result])
 
scala> hbaseRDD.count
res52: Long = 1

Spark学习笔记-HBase操作

Scala版本操作HBase Java版本操作HBase
  • wulinshishen
  • wulinshishen
  • 2014年08月08日 12:57
  • 9562

RDD读写HDFS

使用hdfs的数据存储创建RDD. Spark的整个生态系统与Hadoop是完全兼容的,所以对于Hadoop所支持的文件类型或者数据库类型,Spark也同样支持.另外,由于Hadoop的API有新旧...
  • yhb315279058
  • yhb315279058
  • 2016年01月05日 23:36
  • 4108

RDD基本转换操作(7)–zipWithIndex、zipWithUniqueId

zipWithIndex def zipWithIndex(): RDD[(T, Long)] 该函数将RDD中的元素和这个元素在RDD中的ID(索引号)组合成键/值对。 scala> ...
  • u012592062
  • u012592062
  • 2016年09月14日 15:31
  • 496

spark RDD系列------2.HadoopRDD分区的创建以及计算

Spark经常需要从hdfs读取文件生成RDD,然后进行计算分析。这种从hdfs读取文件生成的RDD就是HadoopRDD。那么HadoopRDD的分区是怎么计算出来的?如果从hdfs读取的文件非常大...
  • u012684933
  • u012684933
  • 2015年11月26日 14:21
  • 3358

Spark RDD编程

Spark RDD编程概述从高层次上来看,每一个Spark应用都包含一个驱动程序,用于执行用户的main函数以及在集群上运行各种并行操作。Spark提供的主要抽象是弹性分布式数据集(RDD),这是一个...
  • sicofield
  • sicofield
  • 2016年03月17日 14:52
  • 1930

Spark算子:RDD基本转换操作(6)–zip、zipPartitions

zip       def zip[U](other: RDD[U])(implicit arg0: ClassTag[U]): RDD[(T, U)]        zip函数用于将两个RDD...
  • u012102306
  • u012102306
  • 2016年06月26日 12:43
  • 1002

Spark算子:RDD基本转换操作(6)–zip、zipPartitions

zip def zip[U](other: RDD[U])(implicit arg0: ClassTag[U]): RDD[(T, U)] zip函数用于将两个RDD组合成Key/Val...
  • wisgood
  • wisgood
  • 2016年09月26日 12:01
  • 439

Spark算子:RDD行动Action操作(7)–saveAsNewAPIHadoopFile、saveAsNewAPIHadoopDataset

saveAsNewAPIHadoopFile def saveAsNewAPIHadoopFile[F def saveAsNewAPIHadoopFile(path: String, ...
  • genghaihua
  • genghaihua
  • 2015年11月03日 11:24
  • 4207

Spark读取Hbase中的数据

大家可能都知道很熟悉Spark的两种常见的数据读取方式(存放到RDD中):(1)、调用parallelize函数直接从集合中获取数据,并存入RDD中;Java版本如下: JavaRDD myRDD ...
  • LW_GHY
  • LW_GHY
  • 2016年05月21日 11:34
  • 7405
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spark RDD使用详解2--RDD创建方式
举报原因:
原因补充:

(最多只允许输入30个字)