我是靠谱客的博主 明亮大地,最近开发中收集的这篇文章主要介绍【大数据基础】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. Dataset的全部内容,希望文章能够帮你解决【大数据基础】1. Dataset所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部