概述
1. 简介
Dataset 是强类型的objects的集合,能够使用函数式和关系式并行的操作。Dataset还有一个名为DataFrame的无类型视图,DataFrame是Row的集合。
Dataset中的操作分为两种:transformation 和 action。transformation 是用于产生新的Dataset,action 触发计算并返回结果。
Dataset是懒加载的,只用action 被触发了,才会引起计算。在Dataset内部有一个逻辑计划,用于描述要产生data的步骤。当action被触发,spark query optimizer 优化逻辑计划,生成物理计划,以便在更加的在分布式系统并行执行。
为了支持domain-specific objects,Encoder是需要的。encoder会把domain specific type T 和 spark 内部的类型系统进行匹配。
有两种方式可以生成Dataset,一种是从外部的存储系统,另一种是从另一个dataset生成新的dataset。
val people = spark.read.parquet("...").as[Person]
// Scala
Dataset<Person> people = spark.read().parquet("...").as(Encoders.bean(Person.class)); // Java
val names = people.map(_.name)
// in Scala; names is a Dataset[String]
Dataset<String> names = people.map((Person p) -> p.name, Encoders.STRING));
2. 构造器
- Dataset(SparkSession sparkSession, org.apache.spark.sql.catalyst.plans.logical.LogicalPlan logicalPlan, Encoder encoder)
- Dataset(SQLContext sqlContext, org.apache.spark.sql.catalyst.plans.logical.LogicalPlan logicalPlan, Encoder encoder)
3. 方法
- agg 聚合函数,grouby之后,进行聚合
df.groupBy(“key1”).agg(count(“key1”), max(“key2”), avg(“key3”)).show - alias : 生成新的dataset,重新生成一个名字。
- apply(String colName) 选取某一列。
- as(Encoder evidence$2) 生成新的dataset,每条record映射成指定类型
- cache() 持久化dataset,(MEMORY_AND_DISK)
- checkpoint() 打断点,返回新的dataset
- coalesce(int numPartitions)
- col(String colName) 返回某一列
- collect() 返回所有的元素
- columns() 返回所有的列名
- createGlobalTempView 生成view
- crossJoin 笛卡尔join
- cube 从dataset取出指定的列,以方便agg
- describe 返回数字列的统计信息
- distinct() 每行的数据去重
- drop(Column col) 删除某列
- dropDuplicates() 行数据去重
- dtypes() 返回列名以及列类型
- except() 两个dataset求差
- exceptAll() 保留重复数据
- explain() 打印计划
- filter(Column condition) 用condition过滤每行的数据
- flatMap(FlatMapFunction<T,U> f, Encoder encoder) 对每一个元素进行f操作,并扁平化结果。
- foreach(ForeachFunction func) 在每个元素运行func
- foreachPartition()
- groupBy() 分组,然后就可以使用聚合操作。
- groupByKey(MapFunction<T,K> func, Encoder encoder) , 根据func group 返回 KeyValueGroupedDataset。
- hint(String name, Object… parameters) 当前dataset指定hint。//todo
e.g. df1.join(df2.hint(“broadcast”)) - intersect() 交集
- intersectAll() 取交集,保留重复的元素
- join(Dataset<?> right) 跟SQL中的join一样
- Experimentalmap(scala.Function1<T,U> func, Encoder evidence$6) 在每一个元素上面运行func
- mapPartitions()
- orderBy()
- printSchema()
- queryExecution() 执行SQL语句
- randomSplit()
- reduce(ReduceFunction func) 使用func reduce
- repartition 重新分区
- rollup 多维汇总
- select :SQL 中的select操作
- sort
- sortWithinPartitions
- toDF() 转成dataframe
- union 取并集
最后
以上就是明亮大地为你收集整理的【大数据基础】1. Dataset的全部内容,希望文章能够帮你解决【大数据基础】1. Dataset所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复