【大数据基础】1. Dataset

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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值