spark使用中的一些总结-进阶版
太久没写博客了,我,回来了。
忙完毕业,写点啥呢,写点实习中的东西吧,主要关于spark的使用相关,相当于之前spark-scala的进阶版?惯例,我主要是做个笔记自己看的,如有雷同,算我抄你的。
- rdd与dataframe选哪个用
- dataframe的几个操作
- 一些环境参数的配置与submit的问题
- 一些语法细节的坑
rdd与dataframe
先说重点:尽量使用dataframe
看下https://blog.csdn.net/weixin_36607803/article/details/53214482,谢谢作者。
rdd
(1)遇到action算子触发作业,transformation算子是不会立即触发作业提交,具体细节百度/Google;(2)stage的划分,划分的依据是依赖算子是否是shuffle(如reduceByKey,Join等)的,每个stage又可以划分成若干task;这个可以这么看,没有shuffle之前都是map操作,不怎么涉及节点之间的通信;
(3)分区(Partition),影响你的并发和计算效率,比如,1000个并发,200个Partition,另外800个并发就空闲着,所以合理的设置repartition和shuffle.partitions
dataframe
(1)DataFrame是一种以RDD为基础的分布式数据集,类似于传统数据库中的二维表格,和sql像的很;(2)Spark SQL得以洞察更多的结构信息,从而对藏于DataFrame背后的数据源以及作用于DataFrame之上的变换进行了针对性的优化,最终达到大幅提升运行时效率的目标;RDD,由于无从得知所存数据元素的具体内部结构,Spark Core只能在stage层面进行简单、通用的流水线优化。
dataframe的几个操作
想起来几个算几个吧,有点忘了。。
一行变多行
explode[A, B](inputColumn: String, outputColumn: String)
例子1:xxDF.explode( “c3” , “c3_” ){time: String => time.split( ” ” )},原始c3列为String类型;
例子2:withColumn(“A_”, explode(col(“A”))).drop(“A”),原始A列为Array类型;多行变一行
groupBy(col1: String, cols: String*)
例子1:groupBy(“A”).agg(collect_list(“B”) as “B_list”).withColumn(“C”, func1(func2(col(“B_list”))));多列拼接为一列
concat
例子1: select(col(“A”), concat(col(“B”), lit(“\t”), col(“C”)) as “BC”)一列变多列
withColumn也行join操作
大表放左边填补缺失项
DF.na.fill(value = 1.0f, cols=Array(“A”))增加某一固定列
withColumn(“flag”, lit(“666”))重命名某一列
withColumnRenamed(“A”, “C”)转换列的数据类型
例子1:val df2 = df1.withColumn(“id1”,col(“id”).cast(StringType)).drop(“id”)比较diff
例子1:val diff = when(col(“id1”) === col(“id”),1).otherwise(0)
val cross_df = df2.join(df2_,”id”,”left”).withColumn(“diff”, diff).filter(col(“diff”) === 0)dataframe某列进行统计排序
例子1:val df_count = df_label.select(“T”).groupBy(“T”).count
val df_count_sort = df_count.orderBy(“count”)
细节见//https://blog.csdn.net/dabokele/article/details/52802150
一些参数上的配置与submit的问题
常见的就不说了,说下其他的,主要是优化任务执行:
预执行/推测任务
推测任务是指对于一个Stage里面拖后腿的Task,会在其他节点的Executor上再次启动这个task,如果其中一个Task实例运行成功则将这个最先完成的Task的计算结果作为最终结果,同时会干掉其他Executor上运行的实例。spark推测式执行默认是关闭的,可通过spark.speculation属性来开启。换句话说:有的搬砖工实在搬这个task太累,那么启动其他并发来做这个,谁先做完就把其他的任务kill掉,很明显这样可以提高速度,但是需要额外的资源。需要观察任务执行的时间分布,如果存在明显拖后腿的现象,则可以使用
GC Time
GC Time太长,影响任务的速度。集群硬件的配置此处不太懂,不乱说,从使用者的角度,GC Time过高解决的思路:
(1)给每个task分配的内存的确很少,调大内存executor memory
(2)机器负载太重,cpu占用过高,导致没有cpu资源进行gc,从而gc时间长。(可以加入sepculate机制)
其他submit参数优化见https://www.cnblogs.com/haoyy/p/6893943.html,谢谢作者。
一些语法细节的坑
读取文件
本地文件:sc.textFile(“file:///home/xx”);
hafs文件:spark.read.parquet(“hdfs://xx”)
注意本地的斜杠有3个;trim函数
删除指定字符串的首尾空白符,类似会把什么”\001”,”\002”、”\t”、”\n”等都去掉的,小心用;split函数
主要关于split不小心会丢掉后面的空字符串,有毒,细节见https://www.cnblogs.com/fulse/p/7855939.html;一点小操作
如果需要简单的二次排序,将2个key组合为tuple作为key,然后sortBy;
参考
1.https://www.cnblogs.com/ITtangtang/p/7977312.html
2.https://blog.csdn.net/uuffo/article/details/78288921
spark使用中的一些总结-进阶版相关推荐
- 特朗普“模仿”奥巴马?进阶版换脸技术DeepFakes来了
整理 | 费棋 出品 | AI科技大本营 DeepFakes,这种能够移花接木的技术,它能将图像或视频中把一张脸替换成另一张脸. 去年 12 月,一个名 Reddit 用户用 DeepFakes 技术 ...
- 移动端页面自适应解决方案—rem布局(进阶版)
之前的一篇<手机端页面自适应解决方案-rem布局>随着时间的推移,该方案已然过时,故为大家介绍一个目前我极力推荐使用的,更加完美的方案--rem布局(进阶版) 该方案使用相当简单,把下面这 ...
- 36篇博文带你学完opencv :python+opencv进阶版学习笔记目录
基础版学习笔记传送门 36篇博文带你学完opencv :python3+opencv学习笔记汇总目录(基础版) 进阶版笔记 项目 opencv进阶学习笔记1: 调用摄像头用法大全(打开摄像头,打开摄像 ...
- Tensorflow详解保存模型(进阶版一):如何有选择的保存变量
当然掌握了基础版还不够,我们来看一下进阶版一:如何有选择的保存变量: 这里还要另外涉及两个函数: tf.variable_scope("xxx") 和 tf.get_variabl ...
- Qt的安装和使用中的常见问题(详细版)
对于太长不看的朋友,可参考Qt的安装和使用中的常见问题(简略版). 目录 1.引入 2.Qt简介 3.Qt版本 3.1 查看安装的Qt版本 3.2 查看当前项目使用的Qt版本 3.3 查看当前项目使用 ...
- kaggle (02) - 房价预测案例(进阶版)
房价预测案例(进阶版) 这是进阶版的notebook.主要是为了比较几种模型框架.所以前面的特征工程部分内容,我也并没有做任何改动,重点都在后面的模型建造section Step 1: 检视源数据集 ...
- c++ 三次多项式拟合_线性回归进阶版,多项式线性回归讲解与实现(附完整代码)...
每天给小编五分钟,小编用自己的代码,带你轻松学习深度学习!本文将会带你做完一个深度学习进阶版的线性回归---多项式线性回归,带你进一步掌握线性回归这一深度学习经典模型,然后在此基础上,小编将在下篇文章 ...
- 蓝桥杯 入门训练 A+B问题进阶版(两个3000位数的加法)
自古码农出少年,年年都有"A+B" 自古码农出少年,年年都有"A+B" 自古码农出少年,年年都有"A+B" 问题描述 输入A.B,输出A+B ...
- python学习-- django 2.1.7 ajax 请求 进阶版
#原来版本 $.get("/add/",{'a':a,'b':b}, function(ret){ $('#result').html(ret)}) #进阶版 $.get(&qu ...
最新文章
- 故障转移集群仲裁盘_windows 2012 标准版 集群 仲裁盘和共享盘无法转移
- 平面设计常用的图像文件格式
- 更换Spring底层日志框架
- mysql注入攻击实_三十三、MySQL基础系列笔记之MySQL安全问题与SQL注入攻击
- 滑动listview隐藏和显示顶部布局
- 【Php】最最简单的php环境搭建
- 春节临近|传统彩色手绘年画素材,满满东方韵味
- VirtualBox虚拟机如何选中“启用嵌套 VT-x/AMD-V”
- php 图片折角处理,如何使用CSS3实现折角效果
- error: field ‘ifru_hwaddr’ has incomplete type
- dropbox 、tombstones、debuggred
- 超实数系统的单子(Monad)结构
- 微信内置浏览器调试和调试微信内的H5页面汇总(持续更新...)
- MySQL之TPC压缩
- 入侵你Linux服务器的一万种玩法...
- 用C语言多线程描述哲学家,C语言多线程之“哲学家就餐”问题
- NB-IOT实现万物互联设计思路分享 (从硬件到单片机到云平台)
- 解决:FLASK中Warning: (1366, Incorrect string value: '\\xD6\\xD0\\xB9\\xFA\\xB1\\xEA...'
- DataFactory快速生成测试数据
- 山东大学软件学院2019软件测试考试回忆
热门文章
- Go GUI---lxn/walk 自带demo学习---7.文件浏览器
- Python 中 __dict__的用法
- pytorch学习(五)---torch.nn模块
- Indian English(印度英语)
- 玩转MFC文档视图架构编程1——深入浅出MFC文档/视图架构之基本概念深入浅出MFC文档/视图架构之文档
- qt5.5实现 记事本程序
- 服务器占用内存高,单任务管理器查看每个程序占用都不高
- Cloudberry:面向移动设备的HTML5云手机平台
- WIN SECS .NET 2.7
- mermaid sequenceDiagram使用指南