目录
8.intersection()方法用于求出两个RDD的共同元素
9.subtract()方法用于将前一个RDD中在后一个RDD出现的元素删除
3.first()/head()/take()/takeAslist():获取若干条记录
4.collect()/collectAslist():获取所有数据
3.select()/selectExpr()/col()/apply()方法
4.col()/apply()方法:获取指定字段,但只可以获取一个字段,返回的是一个Column对象
6.order()/sort()方法:根据指定字段进行排序,默认为升序
一.创建RDD
1.从内存读取数据创建RDD
parallelize()方法:通过调用SparkContext的parallelize方法,在一个已经存在的Scala集合上创建的(一个Seq对象)。集合的对象将会被拷贝,创建出一个可以被并行操作的分布式数据集。
例:
data = [1, 2, 3, 4, 5]
distData = sc.parallelize(data)
makeRDD()方法:只有scala版本的才有makeRDD,和parallelize类似。makeRDD方法实际上是将传入的集合和分区数两个参数传给parallelize方法然后将返回结果作为参数传给withScope方法调用
例:
val seq = Seq(1,Seq("iteblog.com","sparkhost1.com")),
(3,Seq("iteblog.com","sparkhost2.com")),
(2,Seq("iteblog.com","sparkhost3.com")),
val iteblog = sc.makeRDD(seq)
2.从外部存储系统读取数据创建RDD
通过HDFS文件创建RDD
例:
val test = sc.textFile("/opt/spark.txt")
二:对数据进行操作的方法
1.map()方法转换数据
2.sortBy()方法排序
3.collect()方法查询数据
4.flatMap()方法转换数据
5.take()查询某几个值
6.union()方法合并多个RDD
7.distinct()方法去重
8.intersection()方法用于求出两个RDD的共同元素
9.subtract()方法用于将前一个RDD中在后一个RDD出现的元素删除
10.使用键值对RDD的keys和values方法
11.使用键值对RDD的reduceByKey()方法
12.使用键值对RDD的groupByKey()方法
13.使用join()方法连接两个RDD
14.使用zip()方法组合两个RDD
15.使用combineByKey()方法合并相同键的值
16.使用lookup()方法查找指定键的值
17.读取和存储文件
读取:例
val input = sc.textFile("testjson.json")
查看内容:rdd.collect
存储:例
sc.parallelize(jsons).repartition(1).saveAsTextFile("json_out")
三:DataFrame基础操作
1.通过Parquet文件创建DataFrame
例:
val df = saprk.read.load("/opt/user.parquet")
2.通过json文件创建DataFrame
例:
val df = saprk.read.format("json").load("/opt/user.json")
3.通过外部数据库创建DataFrame
4.通过RDD创建DataFrame
方法一:
定义一个样例类
case class person(name:String,age:Int)
读取文件创建RDD
val data = sc.textFile("/opt/test.txt").map(_.split(","))
RDD转成DataFrame
val user = data.map(p => person(p(0),p(1),p(2).toInt)).toDF()
方法二:
5.查看DataFrame数据
1.printSchema:输出数据模式
2.show():查看数据:默认查看20行
例:
user.show() //显示前20条数据
user.show(50) //显示前50条数据
3.first()/head()/take()/takeAslist():获取若干条记录
4.collect()/collectAslist():获取所有数据
6.DataFrame查询操作
1.where()方法:查询符合指定条件的数据
例:
val userwhere = user.where("age = 18 and gender = 'f' ")
2.filter()筛选符合条件的数据
例:
val userwhere = user.filter("age = 18 and gender = 'f' ")
3.select()/selectExpr()/col()/apply()方法
select:例:
val userSelect = user.select("userId","gender") //显示userId,gender字段
selectExpr:例:
val userSelect = user.selectExor("userId","gender as xx") //显示userId,gender字段,并把gender字段取名为xx
4.col()/apply()方法:获取指定字段,但只可以获取一个字段,返回的是一个Column对象
例:
val userSelect = user.col("userId") //显示userId字段
val userSelect = user.apply("userId") //显示userId字段
5.limit()方法:指定获取前n条记录
例:
val user = user.limit(3) //返回前3条记录
6.order()/sort()方法:根据指定字段进行排序,默认为升序
val user = user.orderBy(desc("ID")) //根据id降序排列
val user = user.orderBy(asc("ID")) //根据id升序排列
7.groupBy()方法:根据指定字段分组操作
例:
val user = user.groupBy(user("gender")).count //根据gender字段对user进行分组,并计算元素个数