再论DataSet与DataFrame的区别
需求
计算每个商品分类的成交量
假设有如下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的区别相关推荐
- sql能查到数据 dataset对象里面没有值_spark系列:RDD、DataSet、DataFrame的区别
RDD与DataSet的区别 二者都是由元素构成的分布式数据集合 1. 对于spark来说,并不知道RDD元素的内部结构,仅仅知道元素本身的类型,只有用户才了解元素的内部结构,才可以进行处理.分析:但 ...
- spark DataSet与DataFrame的区别
一句话概括,二者的关系就是 DataFrame = Dataset[Row] 就是说 DataFrame是 Dataset泛型为Row的一种特例,而Dataset的泛型还可以是其他东西,比如自定义类P ...
- RDD和DataFrame和DataSet三者间的区别
RDD:rdd是一个不可变的支持Lambda表达式的并行数据集合 Dataframe:与RDD类似,Dataframe是一个分布式的数据容器,除来数据本身,还记录着数据的结构信息,即schema,Da ...
- .Net 中DataSet和DataTable的 区别与联系
1.简要说明二者关系 在我们编写代码的时候从数据库里取出数据,填充到dataset里,再根据表的名字,实例化到 datatable 中.其实使用 dataset 相当于所使用数据库中数据的副本,保存在 ...
- SparkSQL之“Dataset和Dataframe
package zsyh.sprk.coreimport org.apache.spark.sql.{DataFrame, Dataset, SparkSession} case class Pers ...
- 再谈RDD、DataFrame、DataSet关系以及相互转换(JAVA API)
Spark提供了三种主要的与数据相关的API: RDD DataFrame DataSet 三者图示 下面详细介绍下各自的特点: RDD 主要描述:RDD是Spark提供的最主要的一个抽象概念(Res ...
- RDD 与 DataFrame原理-区别-操作详解
1. RDD原理及操作 RDD (resilientdistributed dataset),指的是一个只读的,可分区的分布式数据集,这个数据集的全部或部分可以缓存在内存中,在多次计算间重用.RDD内 ...
- DataSet与DataReader的区别
DataReader和DataSet最大的区别在于 DataReader使用时始终占用着SqlConnection,在线操作数据库,因此任何对SqlConnection的操作都会引发DataReade ...
- C语言再学习 -- NUL和NULL的区别
NUL 是ASCII 字符集中 '\0' 字符的名字,它的字节模式为全 0.NULL 指一个其值为 0 的指针.它们都是整型值,其值也相同,所以它们可以互换使用.然而,你还是应该使用适当的常量,因为它 ...
最新文章
- Accurate self-correction of errors inlong reads using de Bruijn graphs LoRMA使用de Bruijn图对长read中的错误
- 雅特力415开发资料_雅特力在车用电子领域 AT32 MCU应用于ADAS环视系统
- (转)【javascript基础】原型与原型链
- Void void Void用在泛型
- java 正则首位8或者9的8位数字_从零开始学Python - 第025课:正则表达式的应用
- [机器学习-实战篇]Imdb数据集情感分析之贝叶斯
- 学会python的基础操作题_Python基本操作题
- leetcode题解767-重构字符串
- Madagascar的自定义浮点型函数--指数函数和幂函数
- web api 开发之 filter
- 【图像去噪】基于matlab GUI中值+小波+维纳+滤波器图像去噪【含Matlab源码 616期】
- idea maven tomcat 热部署
- flash绘制荷花多个图层_《荷花》Flash动画课件
- UDP聊天室(代码)
- phython入门开始
- C Primer Plus 第5章 运算符、表达式和语句 5.3 其他运算符
- Java new一个对象
- netterm连接linux虚拟机(转)
- 关于SEO的一些浅认识
- 戏说领域驱动设计(五)——子域
热门文章
- hook监控限制_**CodeIgniter通过hook的方式实现简单的权限控制
- 微信公众号发送小程序卡片_微信公众号里怎么添加小程序-如何在微信[[公众号]]添加小程序卡片-微信关联小程序...
- windows cmd命令行findstr 类似linux中的grep
- 每日三道前端面试题--vue 第五弹
- 无主之地kill ajax,阿克斯顿 - 无主之地中文维基 - 灰机wiki
- cesium cesium is not defined
- cesium 模型绕点飞行一周
- html事件绑定的方法,如何获取html元素所绑定的事件
- liunx 环境下docker安装mysql
- 安装redis k8s_K8S 生态周报| Docker v19.03.6-rc2 发布