太久没写博客了,我,回来了。

忙完毕业,写点啥呢,写点实习中的东西吧,主要关于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使用中的一些总结-进阶版相关推荐

  1. 特朗普“模仿”奥巴马?进阶版换脸技术DeepFakes来了

    整理 | 费棋 出品 | AI科技大本营 DeepFakes,这种能够移花接木的技术,它能将图像或视频中把一张脸替换成另一张脸. 去年 12 月,一个名 Reddit 用户用 DeepFakes 技术 ...

  2. 移动端页面自适应解决方案—rem布局(进阶版)

    之前的一篇<手机端页面自适应解决方案-rem布局>随着时间的推移,该方案已然过时,故为大家介绍一个目前我极力推荐使用的,更加完美的方案--rem布局(进阶版) 该方案使用相当简单,把下面这 ...

  3. 36篇博文带你学完opencv :python+opencv进阶版学习笔记目录

    基础版学习笔记传送门 36篇博文带你学完opencv :python3+opencv学习笔记汇总目录(基础版) 进阶版笔记 项目 opencv进阶学习笔记1: 调用摄像头用法大全(打开摄像头,打开摄像 ...

  4. Tensorflow详解保存模型(进阶版一):如何有选择的保存变量

    当然掌握了基础版还不够,我们来看一下进阶版一:如何有选择的保存变量: 这里还要另外涉及两个函数: tf.variable_scope("xxx") 和 tf.get_variabl ...

  5. Qt的安装和使用中的常见问题(详细版)

    对于太长不看的朋友,可参考Qt的安装和使用中的常见问题(简略版). 目录 1.引入 2.Qt简介 3.Qt版本 3.1 查看安装的Qt版本 3.2 查看当前项目使用的Qt版本 3.3 查看当前项目使用 ...

  6. kaggle (02) - 房价预测案例(进阶版)

    房价预测案例(进阶版) 这是进阶版的notebook.主要是为了比较几种模型框架.所以前面的特征工程部分内容,我也并没有做任何改动,重点都在后面的模型建造section Step 1: 检视源数据集 ...

  7. c++ 三次多项式拟合_线性回归进阶版,多项式线性回归讲解与实现(附完整代码)...

    每天给小编五分钟,小编用自己的代码,带你轻松学习深度学习!本文将会带你做完一个深度学习进阶版的线性回归---多项式线性回归,带你进一步掌握线性回归这一深度学习经典模型,然后在此基础上,小编将在下篇文章 ...

  8. 蓝桥杯 入门训练 A+B问题进阶版(两个3000位数的加法)

    自古码农出少年,年年都有"A+B" 自古码农出少年,年年都有"A+B" 自古码农出少年,年年都有"A+B" 问题描述 输入A.B,输出A+B ...

  9. python学习-- django 2.1.7 ajax 请求 进阶版

    #原来版本 $.get("/add/",{'a':a,'b':b}, function(ret){ $('#result').html(ret)}) #进阶版  $.get(&qu ...

最新文章

  1. 故障转移集群仲裁盘_windows 2012 标准版 集群 仲裁盘和共享盘无法转移
  2. 平面设计常用的图像文件格式
  3. 更换Spring底层日志框架
  4. mysql注入攻击实_三十三、MySQL基础系列笔记之MySQL安全问题与SQL注入攻击
  5. 滑动listview隐藏和显示顶部布局
  6. 【Php】最最简单的php环境搭建
  7. 春节临近|传统彩色手绘年画素材,满满东方韵味
  8. VirtualBox虚拟机如何选中“启用嵌套 VT-x/AMD-V”
  9. php 图片折角处理,如何使用CSS3实现折角效果
  10. error: field ‘ifru_hwaddr’ has incomplete type
  11. dropbox 、tombstones、debuggred
  12. 超实数系统的单子(Monad)结构
  13. 微信内置浏览器调试和调试微信内的H5页面汇总(持续更新...)
  14. MySQL之TPC压缩
  15. 入侵你Linux服务器的一万种玩法...
  16. 用C语言多线程描述哲学家,C语言多线程之“哲学家就餐”问题
  17. NB-IOT实现万物互联设计思路分享 (从硬件到单片机到云平台)
  18. 解决:FLASK中Warning: (1366, Incorrect string value: '\\xD6\\xD0\\xB9\\xFA\\xB1\\xEA...'
  19. DataFactory快速生成测试数据
  20. 山东大学软件学院2019软件测试考试回忆

热门文章

  1. Go GUI---lxn/walk 自带demo学习---7.文件浏览器
  2. Python 中 __dict__的用法
  3. pytorch学习(五)---torch.nn模块
  4. Indian English(印度英语)
  5. 玩转MFC文档视图架构编程1——深入浅出MFC文档/视图架构之基本概念深入浅出MFC文档/视图架构之文档
  6. qt5.5实现 记事本程序
  7. 服务器占用内存高,单任务管理器查看每个程序占用都不高
  8. Cloudberry:面向移动设备的HTML5云手机平台
  9. WIN SECS .NET 2.7
  10. mermaid sequenceDiagram使用指南