RDD创建方式(集合,本地,HDFS)

本文介绍了Spark中RDD的多种创建方式,包括从程序集合、本地文件系统、HDFS,以及数据库、NoSQL、S3和数据流创建。重点讨论了在生产环境中常用的方法,如HDFS创建RDD,并提到了不同创建方式的适用场景和实际意义。
摘要由CSDN通过智能技术生成

1.RDD创建的几个方式
2.RDD创建实战
3.RDD内幕
第一个RDD:代表了Spark应用程序输入数据的来源
通过Transformation来对RDD进行各种算子的转换,实现算法
RDD创建方式
1,使用程序中的集合创建RDD;
2,使用本地文件系统创建RDD;
3,使用HDFS创建RDD
4,基于DB创建RDD(Oracle,SQL)
5,基于NoSQL,例如HBase
6,基于S3创建RDD
7,基于数据流创建RDD(Socket)

1,通过集合创建RDD的实际意义:测试
2,使用本地文件系统创建RDD的作用,测试大量数据的文件
3,使用HDFS来创建RDD 生产环境最常用的RDD创建方式(Hadoop+Spark=目前大数据领域最有前途的组合)
4. 4,5,6三种方式要做getPreferedLocations

可以在智能设备。例如手机,平板,电视上使用Spark,
也可以在PC和Sever使用Spark,只要有jvm就可以运行

Local模式,默认情况下如果失败了就是失败了
若为URES_REGEX(threads,maxFailures)失败了可以重试

这里写图片描述
默认4*8个线程,可修改
这里写图片描述
每个Core可以承载2-4个Partition32*2-4–》64-128之间,区间是因为若并行数据量特别大,内存受限,计算特别复杂,CPU为短板,
数据的位置被BlockManager管理的(磁盘,Tachyon)

通过集合创建RDD

package com.dt.spark.cores

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext

object RDDBasedOnCollections  {
  def main(args :Array[String])
  {
    val conf=new SparkConf()
    conf.setAppName("RDDBasedOnCollections")
    conf.setMaster("local")
    val sc =new SparkContext(conf)
    //创建一个scala集合
    val numbers=1 to 100
    val rdd=sc.parallelize(numbers)
    val sum=rdd.reduce(_+_)
    print("1+2+...+100:   "+sum)
  }
}

运行结果
这里写图片描述

使用本地文件系统创建RDD

package com.dt.spark.cores

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext

object RDDBasedOnLocalFile  {
  def main(args :Array[String])
  {
    val conf=new SparkConf()
    conf.setAppName("RDDBasedOnCollections")
    conf.setMaster("local")
    val sc =new SparkContext(conf)
    val rdd=sc.textFile("D://spark-1.6.1-bin-hadoop2.6//README.md", 1)
   //计算所有行的总和
    val linesLength =rdd.map { line => line.length }
    //在lingsLength RDD基础上进行相加
    val sum=linesLength.reduce(_+_)
    print("the total length of the file of ReadMe:"+sum)
  }
}

运行结果
这里写图片描述

4,基于DB创建RDD
创建方式:
1>首先创建数据库连接函数

def createDbconnection() =
{
     Class.forName("com.mysql.jdbc.Driver").newInstance()
     DriverManager.getConnection("jdbc:mysql://localhost/test/?user=root")
}
def extractValues(r:ResultSet)=
{
     (r.getInt(1),r.getString(2))
}

val data = new JdbcRDD(sc,createDbconnection,"select * from userlist", lowerBound =1,upperBound =3,numPartition =2,mapRow=extractValues)
println(data.collect.tolist)

试用场景:
从数据库读数据,适用于结构化数据的处理
5,基于NoSQL,例如HBase
创建方式:

val conf = new SparkConf(true).set("spark.cassandra.connection.host","hostname")
val sc = new SparkConetext(conf)
val data = sc.cassandraTable("userlist","kv")

试用场景:
从Nosql数据库中读取数据,适用于那些互联网公司
6,基于S3创建RDD
创建方式:
你首先把你的S3访问凭据设置为AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY环境变量

sc.textFile("s3n://***:***@filepath")

试用场景:
从S3中读取数据,适用中小型公司,没有足够的存储设备
7,基于数据流创建RDD
创建方式:

// Create a local StreamingContext with two working thread and batch interval of 1 second.
// The master requires 2 cores to prevent from a starvation scenario.
val conf = new SparkConf().setMaster("local[2]").setAppName("NetworkWordCount")
val ssc = new StreamingContext(conf, Seconds(1))

// Create a DStream that will connect to hostname:port, like localhost:9999
val lines = ssc.socketTextStream("localhost", 9999)

试用场景:
适用于实时数据处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值