需求

计算每个商品分类的成交量

假设有如下csv数据

A0001    202.106.196.115 手机  iphone8 8000
A0002   202.106.196.116 服装  Tshirt  450
A0003   202.106.196.117 药品  阿莫西林    40
A0004   202.106.196.118 药品  板蓝根 23
A0005   202.106.196.119 手机  iphone9 8000
A0006   202.106.196.120 服装  Tshirt  320
A0007   202.106.196.121 药品  阿莫西林    40
A0008   202.106.196.122 药品  板蓝根 23
A0009   202.106.196.123 手机  iphone10    8000
A0010   202.106.196.124 服装  Tshirt  450
A0011   202.106.196.125 药品  阿莫西林    40
A0012   202.106.196.126 药品  板蓝根 23
A0013   202.106.196.127 手机  iphone11    8000
A0014   202.106.196.128 服装  Tshirt  450
A0015   202.106.196.129 药品  阿莫西林    40
A0016   202.106.196.130 药品  板蓝根 23
A0017   202.106.196.131 手机  iphone12    9999
A0018   202.106.196.132 服装  Tshirt  340

csv读取成DataSet[Sale]

就是将读取的csv的转成DataSet[Sale]对象

//csv转dataset对象
//计算每个商品分类的成交量
object HomeWork2 extends App {private val spark: SparkSession = SparkSession.builder().master("local[2]").appName("test").getOrCreate()private val schema: StructType = (new StructType).add("id", DataTypes.StringType).add("ip", DataTypes.StringType).add("kind", DataTypes.StringType).add("detail", DataTypes.StringType).add("price", DataTypes.StringType)private val df: DataFrame = spark.read.schema(schema).csv("D://tmp/test.csv")import spark.implicits._private val ds: Dataset[Sale] = df.as[Sale]ds.createTempView("tmp")val sql="""|select kind,sum(price) sum|from tmp|group  by kind|""".stripMarginprivate val df1: DataFrame = spark.sql(sql)df1.show()
}case class Sale(id: String, ip: String, kind: String, detail: String, price: String) {}

运行结果

+----+-------+
|  服装| 2010.0|
|  药品|  252.0|
|  手机|41999.0|
+----+-------+

csv读取成DataFrame 或者说DataSet[Row]

利用DF完成需求

//csv转dataset对象
object HomeWork3 extends App {private val spark: SparkSession = SparkSession.builder().master("local[2]").appName("test").getOrCreate()private val schema: StructType = (new StructType).add("id", DataTypes.StringType).add("ip", DataTypes.StringType).add("kind", DataTypes.StringType).add("detail", DataTypes.StringType).add("price", DataTypes.StringType)private val df: DataFrame = spark.read.schema(schema).csv("D://tmp/test.csv").toDF("id","ip","kind","detail","price")
df.createTempView("tmp")val sql="""|select kind,sum(price)|from tmp|group by kind|""".stripMarginprivate val df1: DataFrame = spark.sql(sql)df1.show()
}

总结

  • DataSet可以将每一行映射成一个自定义对象,DataFrame不可以

再论DataSet与DataFrame的区别相关推荐

  1. sql能查到数据 dataset对象里面没有值_spark系列:RDD、DataSet、DataFrame的区别

    RDD与DataSet的区别 二者都是由元素构成的分布式数据集合 1. 对于spark来说,并不知道RDD元素的内部结构,仅仅知道元素本身的类型,只有用户才了解元素的内部结构,才可以进行处理.分析:但 ...

  2. spark DataSet与DataFrame的区别

    一句话概括,二者的关系就是 DataFrame = Dataset[Row] 就是说 DataFrame是 Dataset泛型为Row的一种特例,而Dataset的泛型还可以是其他东西,比如自定义类P ...

  3. RDD和DataFrame和DataSet三者间的区别

    RDD:rdd是一个不可变的支持Lambda表达式的并行数据集合 Dataframe:与RDD类似,Dataframe是一个分布式的数据容器,除来数据本身,还记录着数据的结构信息,即schema,Da ...

  4. .Net 中DataSet和DataTable的 区别与联系

    1.简要说明二者关系 在我们编写代码的时候从数据库里取出数据,填充到dataset里,再根据表的名字,实例化到 datatable 中.其实使用 dataset 相当于所使用数据库中数据的副本,保存在 ...

  5. SparkSQL之“Dataset和Dataframe

    package zsyh.sprk.coreimport org.apache.spark.sql.{DataFrame, Dataset, SparkSession} case class Pers ...

  6. 再谈RDD、DataFrame、DataSet关系以及相互转换(JAVA API)

    Spark提供了三种主要的与数据相关的API: RDD DataFrame DataSet 三者图示 下面详细介绍下各自的特点: RDD 主要描述:RDD是Spark提供的最主要的一个抽象概念(Res ...

  7. RDD 与 DataFrame原理-区别-操作详解

    1. RDD原理及操作 RDD (resilientdistributed dataset),指的是一个只读的,可分区的分布式数据集,这个数据集的全部或部分可以缓存在内存中,在多次计算间重用.RDD内 ...

  8. DataSet与DataReader的区别

    DataReader和DataSet最大的区别在于 DataReader使用时始终占用着SqlConnection,在线操作数据库,因此任何对SqlConnection的操作都会引发DataReade ...

  9. C语言再学习 -- NUL和NULL的区别

    NUL 是ASCII 字符集中 '\0' 字符的名字,它的字节模式为全 0.NULL 指一个其值为 0 的指针.它们都是整型值,其值也相同,所以它们可以互换使用.然而,你还是应该使用适当的常量,因为它 ...

最新文章

  1. Accurate self-correction of errors inlong reads using de Bruijn graphs LoRMA使用de Bruijn图对长read中的错误
  2. 雅特力415开发资料_雅特力在车用电子领域 AT32 MCU应用于ADAS环视系统
  3. (转)【javascript基础】原型与原型链
  4. Void void Void用在泛型
  5. java 正则首位8或者9的8位数字_从零开始学Python - 第025课:正则表达式的应用
  6. [机器学习-实战篇]Imdb数据集情感分析之贝叶斯
  7. 学会python的基础操作题_Python基本操作题
  8. leetcode题解767-重构字符串
  9. Madagascar的自定义浮点型函数--指数函数和幂函数
  10. web api 开发之 filter
  11. 【图像去噪】基于matlab GUI中值+小波+维纳+滤波器图像去噪【含Matlab源码 616期】
  12. idea maven tomcat 热部署
  13. flash绘制荷花多个图层_《荷花》Flash动画课件
  14. UDP聊天室(代码)
  15. phython入门开始
  16. C Primer Plus 第5章 运算符、表达式和语句 5.3 其他运算符
  17. Java new一个对象
  18. netterm连接linux虚拟机(转)
  19. 关于SEO的一些浅认识
  20. 戏说领域驱动设计(五)——子域

热门文章

  1. hook监控限制_**CodeIgniter通过hook的方式实现简单的权限控制
  2. 微信公众号发送小程序卡片_微信公众号里怎么添加小程序-如何在微信[[公众号]]添加小程序卡片-微信关联小程序...
  3. windows cmd命令行findstr 类似linux中的grep
  4. 每日三道前端面试题--vue 第五弹
  5. 无主之地kill ajax,阿克斯顿 - 无主之地中文维基 - 灰机wiki
  6. cesium cesium is not defined
  7. cesium 模型绕点飞行一周
  8. html事件绑定的方法,如何获取html元素所绑定的事件
  9. liunx 环境下docker安装mysql
  10. 安装redis k8s_K8S 生态周报| Docker v19.03.6-rc2 发布