
spark 2.0相比老版本变化很大,已经发布了预览版本。原始的英文版databricks的博客:https://databricks.com/blog/2016/05/11/apache-spark-2-0-technical-preview-easier-faster-and-smarter.html
变化点主要有:
1、统一api 到datasets
DataFrame 和 Dataset 的功能是什么?它们都是提供给用户使用,包括各类操作接口的 API。1.3 版本引入 DataFrame,1.6 版本引入 Dataset,2.0 提供的功能是将二者统一,即保留 Dataset,而把 DataFrame 定义为 Dataset[Row],即是 Dataset 里的元素对象为 Row 的一种(SPARK-13485)。
DataFrame,它就是提供了一系列操作 API,与 RDD API 相比较,DataFrame 里操作的数据都是带有 Schema 信息,所以 DataFrame 里的所有操作是可以享受 Spark SQL Catalyst optimizer 带来的性能提升,比如 code generation 以及 Tungsten 等。执行过程如下图所示:
但是 DataFrame 出来后发现有些情况下 RDD 可以表达的逻辑用 DataFrame 无法表达。比如 要对 group by 或 join 后的结果用自定义的函数,可能用 SQL 是无法表达的。如下代码:
case class ClassData(a: String, b: Int)
case class ClassNullableData(a: String, b: Integer)
val ds = Seq(ClassData("a", 1), ClassData("a", 2)).toDS()
val agged = ds.groupByKey(d => ClassNullableData(d.a, null))
.mapGroups {
case (key, values) => key.a + values.map(_.b).sum
}
中间处理过程的数据是自定义的类型,并且 groupby 后的聚合逻辑也是自定义的,故用 SQL 比较难以表达,所以提出了 Dataset API。Dataset API 扩展 DataFrame API 支持静态类型和运行已经存在的 Scala 或 Java 语言的用户自定义函数。同时 Dataset 也能享受 Spark SQL 里所有性能 带来的提升。那么后面发现 Dataset 是包含了 DataFrame 的功能,这样二者就出现了很大的冗余,故在 2.0 时将二者统一,保留 Dataset API,把 DataFrame 表示为 Dataset[Row],即 Dataset 的子集。
因此我们在使用 API 时,优先选择 DataFrame & Dataset,因为它的性能很好,而且以后的优化它都可以享受到,但是为了兼容早期版本的程序,RDD API 也会一直保留着。后续 Spark 上层的库将全部会用 DataFrame,比如 MLlib、Streaming、Graphx 等。
2、全流程code generation
我们看其中一个例子:
select count(*) from store_sales where ss_item_sk = 1000
那么在翻译成计算引擎的执行计划如下图:
而通常物理计划的代码是这样实现的:
class Filter {
def next(): Boolean = {
var found = false
while (!found && child.next()) {
found = predicate(child.fetch())
}
return found
}
def fetch(): InternalRow = {
child.fetch()
}...
}
但是真正如果我们用 hard code 写的话,代码是这样的:
var count = 0
for (ss_item_sk in store_sales) {
if (ss_item_sk == 1000) {
count += 1
}
}
发现二者相关如下图所示:
那么如何使得计算引擎的物理执行速度能达到 hard code 的性能呢?这就提出了 whole-stage code generation,即对物理执行的多次调用转换为代码 for 循环,类似 hard code 方式,减少中间执行的函数调用次数,当数据记录多时,这个调用次数是很大。 最后这个优化带来的性能提升如下图所示:
从 benchmark 的结果可以看出,使用了该特性后各操作的性能都有很大的提升。
tpc-ds的对比测试结果也非常好(spark 1.6对比spark 2.0) :
tpc-ds测试的效果,除流全流程的code generation,还有大量在优化器的优化如空值传递以及对parquet扫描的3倍优化
3、抛弃Dstrem API,新增结构化流api
Spark Streaming 是把流式计算看成一个一个的离线计算来完成流式计算,提供了一套 Dstream 的流 API,相比于其他的流式计算,Spark Streaming 的优点是容错性和吞吐量上要有优势,关于 Spark Streaming 的详细设计思想和分析,可以到 https://github.com/lw-lin/CoolplaySpark 进行详细学习和了解。
在 2.0 以前的版本,用户在使用时,如果有流计算,又有离线计算,就需要用二套 API 去编写程序,一套是 RDD API,一套是 Dstream API。而且 Dstream API 在易用性上远不如 SQL 或 DataFrame。
为了真正将流式计算和离线计算在编程 API 上统一,同时也让 Streaming 作业能够享受 DataFrame/Dataset 上所带来的优势:性能提升和 API 易用,于是提出了 Structured Streaming。最后我们只需要基于 DataFrame/Dataset 可以开发离线计算和流式计算的程序,很容易使得 Spark 在 API 跟业界所说的 DataFlow 来统一离线计算和流式计算效果一样。
比如在做 Batch Aggregation 时我们可以写成下面的代码:
那么对于流式计算时,我们仅仅是调用了 DataFrame/Dataset 的不同函数代码,如下:
最后,在 DataFrame/Dataset 这个 API 上可以完成如下图所示的所有应用:
4、最后 2.0 版本还有一些其他的特性,如:
-
用 SparkSession 替换掉原来的 SQLContext and HiveContext。
-
mllib 里的计算用 DataFrame-based API 代替以前的 RDD 计算逻辑。
-
提供更多的分布式R 语言算法。
-
支持ml pipeline持久化
-
更简单,更高性能的Accumulator API
微信扫一扫
关注该公众号
相关推荐
**Spark-Structured-Streaming**是Spark 2.0引入的新特性,它是Spark Streaming的升级版,提供了更强大的流处理能力。Structured Streaming基于DataFrame/Dataset API,将流处理视为持续不断的数据流,从而简化了...
Flex2是Adobe公司开发的一款用于创建富互联网应用(RIA)的框架,主要基于ActionScript 3.0编程语言和Flash Player运行环境。本资源“flex2第一步光盘文件”是针对初学者和进阶者设计的一套学习资料,旨在帮助用户...
内容概要:本文详细介绍了WinCC嵌入式Excel报表系统的功能和优势。该系统利用VBS脚本和Excel模板相结合的方式,能够直接从WinCC变量归档库读取数据并生成高质量的报表。文中展示了多种实用的技术细节,如数据质量校验、不同数据处理模式(实时值、平均值、累计值)、模板机制、报表控件集成以及条件格式的应用。此外,还提供了具体的代码示例来解释如何实现这些功能。 适用人群:适用于从事工业控制系统开发、维护的技术人员,尤其是那些需要频繁处理报表任务的人群。 使用场景及目标:主要应用于需要快速生成各类生产数据报表的场合,如日报表、月报表等。通过该系统可以极大提高工作效率,减少人工干预,确保数据准确性,并且降低了学习成本和技术门槛。 其他说明:该系统不仅支持多版本兼容,而且移植性强,能够在不同的WinCC环境中轻松部署。同时,它还允许用户通过简单的Excel模板修改来自定义报表格式,满足多样化的业务需求。
内容概要:本文档《信息安全领域实战项目.docx》详细介绍了网络安全渗透测试的具体步骤和实战案例。文档从信息收集开始,逐步深入到漏洞验证、漏洞攻击和权限提升等环节。首先,通过使用工具如FOFA进行资产收集,识别出目标服务器开放的多个端口,并进一步通过后台扫描工具发现潜在的敏感文件。接着,针对发现的Grafana任意文件读取漏洞(CVE-2021-43798)和ActiveMQ任意文件上传漏洞(CVE-2016-3088),分别进行了详细的漏洞验证与攻击演示,包括具体的payload构造、利用方式及攻击效果展示。最后,探讨了CVE-2021-4034 Linux polkit提权漏洞的应用场景及其利用方法。此外,文档还涵盖了政务智慧信息系统安全建设项目的背景、目标、建设内容以及相关的人才需求分析。 适合人群:具备一定网络安全基础,尤其是对渗透测试感兴趣的初学者或中级技术人员。 使用场景及目标:①帮助读者理解并掌握从信息收集到漏洞利用的完整渗透测试流程;②提供实际操作案例,使读者能够学习如何识别和利用常见的Web应用漏洞;③培养读者在面对真实世界的安全问题时,能够运用所学知识进行有效的分析和解决。 阅读建议:由于文档内容涉及较多的技术细节和实战操作,建议读者在阅读过程中结合实际环境进行练习,并参考官方文档或其他权威资料加深理解。同时,注意合法合规地使用所学技能,确保所有活动都在授权范围内进行。
内容概要:本文详细介绍了电动汽车动力系统的仿真技术,涵盖双向DCDC变换器的能量反馈机制和支持异步电机与永磁同步电机的仿真。文中展示了多个关键控制策略,如电流环控制、最大转矩电流比(MTPA)控制、弱磁控制以及基于事件触发的协调控制。通过MATLAB、Python和C等多种编程语言的具体代码实例,解释了如何实现高效的能量管理和电机控制。此外,文章还讨论了仿真过程中遇到的实际问题及其解决方案,如电压过冲、电流振荡和系统耦合等问题。 适合人群:从事电动汽车研究与开发的技术人员、高校相关专业师生、对电动汽车动力系统感兴趣的工程师。 使用场景及目标:适用于电动汽车动力系统的设计与优化,帮助工程师理解和掌握双向DCDC变换器的工作原理及电机控制策略,提高能量利用效率,确保系统稳定性。 其他说明:文章不仅提供了详细的理论和技术背景,还分享了许多实践经验,有助于读者更好地将理论应用于实际项目中。
内容概要:本文详细介绍了FracPredictor这一基于深度学习的裂缝预测工具及其应用。首先探讨了数据处理部分,如利用滑窗处理时序+空间特征混合体的方法,以及如何将岩石力学数据转换为适合神经网络的格式。接着深入剖析了模型架构,包括时空双流网络、注意力机制用于跨模态融合、HybridResBlock自定义层等创新设计。此外,文章还分享了训练技巧,如渐进式学习率衰减、CosineAnnealingWarmRestarts调度器的应用。对于可视化方面,则推荐使用PyVista进行三维渲染,以直观展示裂缝扩展过程。文中还提到了一些实用的小技巧,如数据预处理中的自动标准化、配置文件参数调整、以及针对特定地质条件的优化措施。最后,通过多个实际案例展示了FracPredictor在提高预测准确性、降低计算成本方面的优势。 适合人群:从事石油工程、地质勘探领域的研究人员和技术人员,尤其是对裂缝建模与压裂模拟感兴趣的从业者。 使用场景及目标:适用于需要高效、精准地进行裂缝预测和压裂模拟的工程项目。主要目标是帮助用户掌握FracPredictor的工作原理,学会从数据准备到结果可视化的完整流程,从而优化压裂方案,减少工程风险。 其他说明:文章不仅提供了详细的代码示例,还附带了丰富的实战经验和注意事项,有助于读者更好地理解和应用这项新技术。
multisim
基于ssm的房产中介信息管理系统:前端 html、jquery、layui,后端 maven、springmvc、spring、mybatis;角色分为管理员、员工;集成卖家信息,买家信息,房屋管理等功能于一体的系统。 ## 功能介绍 - 用户管理:用户信息的增删改查,按用户名搜素 - 通知公告:公告信息的增删改查,关键词搜索 - 卖家信息:卖家信息的增删改查,关键词搜索 - 买家信息:买家信息的增删改查,关键词搜索 - 房屋管理:房屋信息的增删改查,按小区名称搜索,房屋图片上传 - 房屋搜索:房屋列表查询,查询满足条件的房屋信息 ## 环境 - <b>IntelliJ IDEA 2021.3</b> - <b>Mysql 5.7.26</b> - <b>Tomcat 7.0.73</b> - <b>JDK 1.8</b>
基于ssm的学生资助管理系统:前端 jsp、jquery,后端 springmvc、spring、mybatis;角色分为:管理员、学生;集成OA流程管理、贫困生认定、奖学金管理等功能于一体的系统。 ## 功能介绍 - 系统管理:权限管理,菜单管理,在线管理,日志管理,系统用户管理 - OA流程管理:工作流程(模型管理,流程管理,运行中流程,历史的流程),任务管理,消息管理 - 贫困生认定管理:贫困生认定申请,申请材料审核,上报院校审批 - 国家助学金管理:国家助学金申请,申请材料审核,上报院校审批 - 勤工俭学管理:学生基本信息,勤工岗位信息,学生勤工信息 - 公告管理:公告信息的增删改查 ## 环境 - <b>IntelliJ IDEA 2021.3</b> - <b>Mysql 5.7.26</b> - <b>Tomcat 7.0.73</b> - <b>JDK 1.8</b>
芬朗A12U电脑调音软件是专为音响爱好者和专业人士设计的一款强大工具,喜欢的话,直接下载吧
基于ssm的学生成绩管理系统:前端 jsp、jquery、bootstrap,后端 maven、springmvc、spring、mybatis;角色分为管理员、学生;集成用户管理,成绩管理,公告管理等功能于一体的系统。 ## 功能介绍 - 基本功能:登录,注册,退出,密码修改 - 用户管理:用户信息的增删改查,用户也可以由学生自行注册,管理员可以修改和删除用户信息,学生只能操作自己的信息 - 成绩管理:管理员对成绩信息的增删改查,学生只能查询 - 公告管理:管理员对公告信息的增删改查,学生只能查看 ## 环境 - <b>IntelliJ IDEA 2021.3</b> - <b>Mysql 5.7.26</b> - <b>Tomcat 7.0.73</b> - <b>JDK 1.8</b>
内容概要:本文介绍了一种快速轻量级的通道注意力机制(FFCM),并通过修改MBConv模块将其应用于EfficientNet模型中。FFCM由局部通道交互和全局通道交互两部分组成。局部通道交互通过深度可分离卷积实现,全局通道交互则采用全局平均池化和两个卷积层来减少通道维度并恢复。为了将FFCM集成到MBConv模块中,定义了`add_ffcm_to_mbconv`函数,该函数在MBConv模块的前向传播过程中插入FFCM模块。最后,通过`create_model`函数创建了一个带有FFCM的EfficientNet模型,并修改了分类头以适应不同的类别数量。代码还展示了如何加载预训练权重以及模型的测试输出。; 适合人群:对深度学习有一定了解,特别是熟悉卷积神经网络和注意力机制的研究人员或工程师。; 使用场景及目标:①理解快速轻量级通道注意力机制(FFCM)的设计思路及其在卷积神经网络中的应用;②掌握如何修改现有的卷
社交媒体_短视频发布_用户互动_测试平台_1744736861.zip
内容概要:本文详细介绍了使用COMSOL进行CO2驱水的二阶偏微分方程(PDE)两相流模拟的方法和技术细节。主要内容涵盖核心控制方程(如达西定律和质量守恒方程)、相对渗透率模型的选择(如Corey模型和Brooks-Corey模型)、边界条件的设置、求解器配置以及后处理技巧。文中强调了超负压驱替现象的模拟及其重要性,并提供了多个具体的操作实例和优化建议,确保模型的稳定性和准确性。 适合人群:从事油气田开发、碳捕集与利用封存(CCUS)研究的专业技术人员,以及对多物理场耦合仿真感兴趣的科研人员。 使用场景及目标:适用于油气田开发过程中CO2驱水模拟的研究项目,旨在提高采收率并评估碳封存效果。主要目标是通过精确的数学模型和高效的数值方法,模拟CO2和水在孔隙介质中的动态交互过程,从而优化注入策略和预测驱替效果。 其他说明:文中提供的MATLAB代码片段和COMSOL操作指南有助于读者快速上手实践。同时,文章还讨论了常见的数值问题及其解决方案,如数值震荡、模型发散等,帮助读者规避常见错误并提高模拟的成功率。
内容概要:本文详细介绍了使用COMSOL进行隧道开挖及衬砌支护仿真的全过程,涵盖地应力平衡、开挖模拟、衬砌支护等关键技术环节。首先强调了地应力平衡的重要性,包括重力补偿、初始应力场设置等。接着阐述了开挖模拟的具体方法,如材料切换、几何非线性选项的应用。然后讲解了衬砌支护的实施细节,涉及壳接口创建、接触条件设置等。最后讨论了分步求解策略以及常见问题的解决方案,如应力奇点处理、网格优化等。 适合人群:从事岩土工程仿真、隧道工程施工及相关领域的工程师和技术人员。 使用场景及目标:适用于需要进行隧道开挖及支护仿真的工程项目,旨在帮助用户掌握COMSOL软件在此类应用中的具体操作方法,提高仿真精度和效率。 其他说明:文中提供了大量实用技巧和注意事项,如参数设置、代码片段等,有助于读者更好地理解和应用相关技术。同时提醒读者关注实际项目的具体情况,灵活调整参数以获得最优结果。
内容概要:本文详细介绍了作者使用C++和OpenCV构建的一个高效的模板匹配框架,适用于工业检测场景。该框架支持创建带有旋转角度的矩形ROI、圆形ROI以及环形ROI,并提供了手绘屏蔽功能来提高模板制作的灵活性。为了加快匹配速度,采用了多尺度金字塔加速、并行计算和亚像素级定位优化等技术手段。此外,文中还分享了一些实际应用案例和技术难点解决方案,如硬币分类计数、PCB板元件计数等。 适合人群:有一定C++和OpenCV基础,从事机器视觉或工业自动化相关领域的工程师。 使用场景及目标:①用于工业生产线上的物体检测与分类;②提高模板匹配的速度和准确性;③解决复杂背景下目标识别的问题。 其他说明:文中不仅展示了具体的代码实现,还讨论了许多实践经验,包括性能优化技巧、常见错误及其规避方法等。对于希望深入了解模板匹配算法并在实际项目中应用的人来说非常有价值。
工作的时候,有很多琐碎的事情需要重复的做 比如打开某个文件,打开某个网站,打开某个软件 这个时候可以写个自动脚本,把机械琐碎的事情交给脚本处理 但是脚本一多,不好管理,而且要选择哪个脚本也是个麻烦的事情 所以写了OneClicker,快捷键呼出脚本的管理界面,脚本也绑定快捷键 在任何一个地方,只要按两三个按键,就可以执行某个脚本,处理掉琐碎事情 使用的流程 配置 1、function文件夹加上批处理脚本 2、运行软件OneClicker.exe 3、配置脚本的快捷键 使用 1、按Ctrl + K,弹出界面 2、再按脚本的快捷键,注意输入法是要英文的 例子:打开百度:先按Ctrl + K,再按B 关闭 1、点解界面右上角的关闭按钮,不会退出软件,只是最小化到托盘 2、想要退出软件,可以在任务栏或者托盘右键关闭
内容概要:本文详细介绍了基于MATLAB实现的多种自适应滤波算法用于心音信号降噪的方法和技术。首先阐述了LMS(最小均方)算法的基本原理及其简单实现,接着讨论了归一化LMS(NLMS)、变步长LMS两种改进版本的特点和优势,并提供了相应的Matlab代码示例。最后深入探讨了RLS(递归最小二乘法)算法,在理论层面解释了其为何能在降噪效果上超越前两者,并附上了完整的代码实现。文中还给出了具体的实验数据对比,展示了各算法在不同条件下的性能差异。 适用人群:从事生物医学信号处理的研究人员、工程师以及对自适应滤波感兴趣的高校师生。 使用场景及目标:适用于需要对心音信号进行高质量降噪处理的实际应用场景,如临床诊断辅助设备的研发;同时也可以作为教学材料帮助学生理解自适应滤波的工作机制。 其他说明:文中不仅提供了详细的算法解析,还包括了许多实用的经验分享和技术细节提示,有助于读者更好地掌握并应用于实践中。此外,作者还强调了一些常见的误区和注意事项,提醒使用者避免不必要的错误。
基于ssm+jsp的虚拟商品管理系统:前端 jsp、jquery,后端 maven、springmvc、spring、mybatis;角色分为管理员、用户;集成促销商品、商品购买、购物车、订单查询等功能于一体的系统。 ## 环境 - <b>IntelliJ IDEA 2021.3</b> - <b>Mysql 5.7.26</b> - <b>Tomcat 7.0.73</b> - <b>JDK 1.8</b>
内容概要:本文介绍了如何将SE(Squeeze-and-Excitation)模块集成到Swin Transformer模型中。首先定义了一个适用于Swin Transformer的SEModule类,该类能够接收形状为(B, L, C)的输入张量并进行通道注意力机制的计算。接着通过add_se_to_swin函数遍历Swin Transformer的各层,在每个SwinTransformerBlock后的MLP模块后插入SE模块。最后提供了get_model函数用于获取预训练或未预训练的Swin Transformer模型,并替换原有的分类头以适应指定数量的类别。通过测试代码验证了模型结构修改后的前向传播正确性; 适合人群:对深度学习有一定了解,特别是熟悉PyTorch框架和Swin Transformer模型的研究人员或开发者; 使用场景及目标:①需要增强Swin Transformer模型特征表示能力时;②希望研究SE模块与Transformer架构结合效果时; 阅读建议:由于涉及到具体的代码实现,建议读者具备一定的PyTorch编程经验,同时最好对Swin Transformer和SE模块有初步的认识,在阅读时可以结合官方文档理解各个组件的功能。