Spark基础

目录

               RDD

         一.创建RDD

       (1)从内部读取数据创建RDD

         (2)从外部储存系统中读取数据创建RDD

二.转换操作

三.行动操作

        sql

Spark SQL的特点 

DataFrame


RDD

  • RDD(Resilient Distributed Dataset) 弹性分布式数据集,spark中最重要数据结构概念,代表一个不可变、可分区、可并行计算的集合,逻辑上是一个数据集,物理上可以分块分布在不同的机器上并发运行。

一.创建RDD

(1)从内部读取数据创建RDD

1.parallelize()

val data=Array(1,2,3,4,5)

val distData=spark.sparkContext.parallelize(data)

2.makeRDD()

val seq=Seq((1,Seq("iteblog.com","sparkhost1.com")),
(3,Seq("iteblog.com","sparkhost2.com")),

(2,Seq("iteblog.com","sparkhost3.com"))),

val iteblog=spark.sparkContext.makeRDD(seq)

iteblog.collect

(2)从外部储存系统中读取数据创建RDD

1.通过linux本地文件创建RDD

rdd1 = spark.sparkContext.textFile("hdfs://path/to/your/file.txt")
 

二.转换操作

(1)map()

例如:可通过map()方法对一个元素进行 平方运算

val distData= spark.sparkContext.parallelize(List(1,3,45,3,76))

val sq_dist=distData.map(x => x*x)

(2)flatMap()

val test=spark.sparkContext.parallelize(List("How are you","i am fine","what about you"))

test.collect

test.flatMap(x=> x.split(" ")).collect

(3)union()

用于将两个RDD合并成一个

val rdd1=spark.sparkContext.parallelize(List(('a',1),('b',2),('c',3)))

val rdd2=spark.sparkContext.parallelize(List(('a',1),('d',4),('e',5)))

rdd1.union(rdd2).collect

(4)filter()

用于过滤元素

val rdd1=spark.sparkContext.parallelize(List(('a',1),('b',2),('c',3)))

rdd1.filter(_._2 >1).collect

rdd1.filter(x => x._2 >1).collect

(5)groupByKey()

val rdd_1=spark.sparkContext.parallelize(List(('a',1),('a',2),('b',1),('c',1),('c',1)))

val g_rdd=rdd_1.groupByKey()

g_rdd.collect

g_rdd.map(x=>(x._1,x._2.size)).collect

(6)reduceByKey()

合并统计键相同的值

val rdd_1=spark.sparkContext.parallelize(List(('a',1),('a',2),('b',1),('c',1),('c',2)))

val re_rdd_1=rdd_1.reduceByKey((a,b)=>a+b)

re_rdd_1.collect

(7) intersection()

找出两个RDD的交集

val rdd_6=spark.sparkContext.parallelize(List(('a',1),('a',1),('b',1),('c',1)))

val rdd_7=spark.sparkContext.parallelize(List(('a',1),('b',1),('d',1)))

rdd_6.intersection(rdd_7).collect

(8)subtract()

找出两个RDD的补集

val rdd_16=spark.sparkContext.parallelize(List(('a',1),('b',1),('c',1)))

val rdd_17=spark.sparkContext.parallelize(List(('d',1),('e',1),('c',1)))

rdd_16.subtract(rdd_17).collect

rdd_17.subtract(rdd_16).collect

(9)cartesian()

将两个集合的元素两两组合,笛卡尔积

val rdd8=spark.sparkContext.parallelize(List(1,3,5,3))

val rdd9=spark.sparkContext.parallelize(List(2,4,5,1))

rdd8.cartesian(rdd9).collect

三.行动操作

(1)collect()

返回数据集中所有元素

val data=spark.sparkContext.parallelize(List((1,3),(45,3),(7,6)))

sort_data.collect

(2)count(n)

返回数据集中所有元素个数

val data1=spark.sparkContext.parallelize(List(1,2,3))

data1.count

(3)take(n)

返回前n个元素

val data2=spark.sparkContext.parallelize(1 to 10)

data2.take(5)

(4) foreach()

rdd1.collect().foreach(println)

四.distinct()

用于RDD的数据去重

val rdd_3=spark.sparkContext.parallelize(List(('a',1),('a',1),('b',1),('c',1),('c',2)))

rdd_3.distinct().collect

五.sort()

用于数据排序

val data5=spark.sparkContext.parallelize(List((1,3),(45,3),(7,6)))

val sort_data5=data.sortBy(x=>x._2,false,1)

sql

Spark SQLSpark用来处理结构化数据的一个模块,它提供了一个编程抽象结构叫做DataFrame数据模型(即带有Schema信息的RDD),Spark SQL作为分布式SQL查询引擎,让用户可以通过SQLDataFrames APIDatasets API三种方式实现结构化数据处理。

Spark SQL的特点 

(1)易整合

(2)统一的数据访问方式

(3)兼容Hive

(4)标准的数据连接

DataFrame

     (1)创建DataFrame

1. 已存在的 RDD 调用 toDF () 方法 转换得到 DataFrame
2.通过 Spark 读取数据源 直接 创建 DataFrame
(2)show()查看数据
show()显示前20条数据
show(numRows:Int)显示numRows条记录
show(truncate:Boolean)是否最多显示20个字符,默认为true
show(numRow:Int,truncate:Boolean)显示numRows条记录并设置过长字符串的显示格式

 查询年龄为55的数据
显示前3行数据
    hj.show(3)
(3)takeAsList(n:Int)

获取N条记录,以列表形式展示

      (4)sort()

      对id字段进行升序和降序排序

(5)select()

获取指定字段值

(6)selectExpr()

方法定义一个函数replace对对象中的id字段进行转换,将字段值替换

(7)groupBy():

   对记录进行分组

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值