有谁还在说入门大数据难?从spark开始带你起飞
对于大数据刚刚接触或想接触的朋友,希望这篇入门篇可以给到大家一些帮助,在入门的时候可以更加轻松,话不多说,请看正文。
1、RDD Dataset 和 DataFrame 速览
RDD 和 DataFrame 都是一个可以看成有很多行,每一行有若干列的数据集(姑且先按照记录和字段的概念来理解)
在 scala 中可以这样表示一个 RDD:
RDD[Array[String]] 每条记录是字符串构成的数组
RDD[(String, Int, ….)] 每条记录是多个不同类型的数据构成的元组
RDD 是分布式的 Java 对象的集合,RDD 中每个字段的数据都是强类型的
推荐一个大数据学习群 119599574晚上20:10都有一节【免费的】大数据直播课程,专注大数据分析方法,大数据编程,大数据仓库,大数据案例,人工智能,数据挖掘都是纯干货分享,你愿意来学习吗?
当在程序中处理数据的时候,遍历每条记录,每个值,往往通过索引读取
val filterRdd = rdd.filter( x => { var result = true
这种方式在 MapReduce 程序中也常常见到。
DataFrame 则是一个每列有命名的数据集,类似于关系数据库中的表,读取某一列数据的时候可以通过列名读取。所以相对于 RDD,DataFrame 提供了更详细的数据的结构信息 schema。
在 Spark 2.1 中, DataFrame 的概念已经弱化了,将它视为 DataSet 的一种实现
DataFrame is simply a type alias of Dataset[Row]
@DataFrame=org.apache.spark.sql.Dataset[org.apache.spark.sql.Row"">http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.sql.package@DataFrame=org.apache.spark.sql.Dataset[org.apache.spark.sql.Row]
除了 Row 这种类型之外,还可以是一些其他自定义的类。
Dataset API 属于用于处理结构化数据的 Spark SQL 模块(这个模块还有 SQL API),通过比 RDD 多的数据的结构信息(Schema),Spark SQL 在计算的时候可以进行额外的优化。 Spark SQL's optimized execution engine[1]。通过列名,在处理数据的时候就可以通过列名操作。
RDD、DataFrame 和 DataSet 的区别中介绍了 DatasetAPI 的优势,MLlib 里也加大了对 DataSetAPI 的支持,并且提到 The RDD-based API is expected to be removed in Spark 3.0。所以未来推荐使用 DataSetAPI。
2、使用介绍
2.1 加载数据
目前 tdw 提供了读取 tdw 表生成 RDD 或 DataFrame 的 API。
1.6API
或者直接读取 HDFS
val hdfsURL="hdfs://**/**/**/**/ds=20170101/*gz"
2.2 转换操作
1、选择指定列
//查看表的 Schema
2、map filter
val filterData = tdwDataFrame.filter( element => { var retFlag = true
这里 有两个地方需要说明 isNullAt 首先要判断要选取的列的值是否为空, 如果是空,直接读取数据会抛异常。getAs 本来是要指定具体的类型的,如 getAs[String],但因为 tdwDataFrame 的 schema 已知,包括各个字段的类型,如 gid 是 long, 这样如果按 getAs[String] 有可能会发生类型转换异常。
转换加工某些字段,即将原来的 DataFrame map 操作转换成另外一个 DataFrame。最开始的想法是用 scala 的 一些列表类型封装数据,当每个列的类型相同的时候,用数组 如 Array[String],但一般情况下是不同的,就用元组("a", 1, …),但这个方法有个局限,我们以 RDD 的操作为例,但在 DataFrame 中也是一样的
val mRdd2 = filterRdd.map(
不使用 数组和元组,而使用 Row
implicit val rowEncoder = Encoders.kryo[Row]
3、聚合分组统计
//指定列,分组统计
4、union
val unionDataFrame = aggDagaset1.union(aggDagaset2)//处理空值,将空值替换为 0.0unionData.na.fill(0.0)
5、NaN 数据中存在数据丢失
NaN,如果数据中存在 NaN(不是 null ),那么一些统计函数算出来的数据就会变成 NaN,如 avg。所以要对数据进行过滤或者转换。
import java.lang.Double.isNaNif (isNaN(x.getAs("field"))){ 0}
6、Sql 语句里一些不支持的函数或写法
不支持的函数:
url_decode
不支持的写法
not rlike
支持 rlike,所以在写正则的时候可以取反
如 not rlike '^\d $'
要求不能数字开头,数字结尾,全是数字
就可以写成 rlike '\d[*^0-9] \d[*^0-9]*'
里面至少有一个不是数字的字符
2.3 TDW 一些基础功能
val tdwUtil = new TDWUtil(Constant.tdwUser, Constant.tdwPasswd, "db")//表是否存在tdwUtil.tableExist(table)//分区是否存在tdwUtil.partitionExist(table, x)
2.4 本地测试 JUnit Test
由于 Spark 程序,需要由客户端提交给集群执行,但在程序调试阶段,想快速验证代码逻辑,通过每次提交集群执行程序太费力了,可以在本地测试一下。但其实没必要用 JUnit,但有工具何乐而不用。
import org.junit.Before
2.5 Spark environment 参数
DataFrame shuffle size 设置值
sparkSession.conf.set("spark.sql.shuffle.partitions", "200")
DataFrame groupBy cube 统计的时候,需要 shuffle,目前 tdw 的 shuffle 默认 partiton 的个数是 200, 如果数据量过大,或者 cube 的时候数据膨胀,就要适时调大这个参数。因为一个 partition 对应一个任务,增加 partition 个数,会增加并行的任务数,提高运行效率。
set("spark.default.parallelism", "10")
这个参数好有同样的效果,不过好像应用的场景是 RDD 的 reduce 操作。
2.6 写 mysql
val url = "jdbc:mysql://host:port/database?useUnicode=yes&characterEncoding=UTF-8"val connectionProperties = new Properties()
Scala JDBC 连接 Mysql,操作 mysql
Class.forName("com.mysql.jdbc.Driver")
发送 http 请求
import org.json4simport org.json4s.jackson.JsonMethods._
一篇文章看不够?不够学习?想了解更多优质文章,想要更多有关大数据方面的资料和咨询?那么你的机会来了,动手添加图片下方群号,老师带你轻松玩转大数据。其实你离掌握技能只差一条有效的学习途径。
119599574
有谁还在说入门大数据难?从spark开始带你起飞相关推荐
- 网贷大数据什么时候会好_为什么大数据待遇那么好 如何入门大数据行业
为什么大数据待遇那么好?如何入门大数据行业?在IT技术中,有不少技术因为低端人才的饱和,对从业者提出越来越高的要求,从而加大了初级程序员找工作的压力.相对于其他IT技术,大数据的人才需求正处于供不应求 ...
- 为什么都建议学java而不是python-为什么入门大数据选择Python而不是Java?
马云说:"未来最大的资源就是数据,不参与大数据十年后一定会后悔."毕竟出自wuli马大大之口,今年二月份我开始了学习大数据的道路,直到现在对大数据的学习脉络和方法也渐渐清晰.今天我 ...
- python和java区别大吗-为什么入门大数据选择Python而不是Java?
马云说:"未来最大的资源就是数据,不参与大数据十年后一定会后悔."毕竟出自wuli马大大之口,今年二月份我开始了学习大数据的道路,直到现在对大数据的学习脉络和方法也渐渐清晰.今天我 ...
- 翰林学院python_为什么入门大数据选择Python而不是Java?
马云说:"未来最大的资源就是数据,不参与大数据十年后一定会后悔."毕竟出自wuli马大大之口,今年二月份我开始了学习大数据的道路,直到现在对大数据的学习脉络和方法也渐渐清晰.今天我 ...
- python是一种面向对象的高级语言_为什么入门大数据选择Python而不是Java?
马云说:"未来最大的资源就是数据,不参与大数据十年后一定会后悔."毕竟出自wuli马大大之口,今年二月份我开始了学习大数据的道路,直到现在对大数据的学习脉络和方法也渐渐清晰.今天我 ...
- 浅显易懂入门大数据系列:一、HDFS(超详细)
文章目录 一.Hadoop的诞生 Hadoop的定义及组成 HDFS产生的背景 背景下所面临的挑战 二.Hadoop概念及原理 HDFS应运而生 HDFS的存储特点 HDFS的架构特点 HDFS的架构 ...
- Tips|如何高效入门大数据?
说到大数据,作为技术开发的你一定不陌生,纵观国内大大小小的企业,但凡是赚钱的生意,一定与大数据有关联. 京东.淘宝等电商网站利用用户画像做个性化商品推荐: 今日头条.抖音利用算法做精细化运营: 滴滴. ...
- 大数据入门-大数据技术概述(一)
目录 大数据入门系列文章 1.大数据入门-大数据是什么 一.概念 二.技术详解 1.基础架构:Hadoop 2.分布式文件系统:HDFS 3.数据仓库:Hive 4.存储引擎:Kudu 5.分布式数据 ...
- 三分钟入门大数据之用户画像标签的分类
哈喽,大家好,我是汉斯老师.近几年来,互联网行业由于较高的薪资收入,受到许多人的追捧.很多年轻的学子,或是其他行业的有志青年,都想要投身到这个行业中来.然而一方面受到"互联网寒冬" ...
最新文章
- 开源软硬一体OpenCV AI Kit(OAK)
- 深入分析Spark任务调度的原理--Java后端同学入门Spark编程系列
- SAP WM Movement Type 里的‘Ref.Stor.Type Search’字段用法初探
- python导出json
- monty python dead parrot-BBC十大英剧神作出炉!
- wubantu18.04版,pycharm2.18.3.2永久破解来了,借鉴个位大神的教程破掉的,感谢各位大佬...
- 技巧:设置程序默认安装到D盘
- python的类里的属性是否可以为列表_Python中如何获取类属性的列表
- 图解java多线程设计模式 pdf_图解Java设计模式之状态模式
- ldirectord实现高可用负载集群
- Sqlite3 数据库基本操作
- go back go fullscreen_四款高端便携音箱TUFTON、B17、MUSIC3和GO+PLAY音质排行榜
- 关于12864显示器的SPI串行驱动问题的研究,AVR处理器(1)
- c语言 归一化图片大小,OpenCV学习笔记(1)——resize函数实现图像大小归一化
- 信源编码程序设计实验C语言实现,霍夫曼信源编码实验报告.docx
- python调用dm.dll
- 【CSS】background各属性一览汇总
- 超好用的手机录屏软件推荐
- 空指针异常 NullPointException
- 安装宝塔面板后原ssh连接失败问题及解决