Spark编程之深入理解DataSet

深入理解Spark 本文介绍了Spark实时计算框架的核心概念和架构原理。首先阐述了Spark作为分布式并行计算框架的特点,包括基于内存的迭代式计算、丰富的算子库以及函数式编程风格。接着详细分析了Spark的运行模式(Local、Standalone、YARN、Mesos)及其适用场景,特别适合机器学习等需要多次迭代的计算任务。文章深入解析了Spark的关键术语和运行机制,包括RDD、DAG、Driver、Executor等组件,以及Job、Stage、Task等执行单元之间的关系。最后讨论了Spark在准实时计算场景中的应用 阅读详情

1.前言

DataSet是Spark重要的数据结构之一拥有比RDD更高的性能,比DataFrame更灵活的操作方式,是Spark SQL的扩展,提供了额外的编译时类型检查。本文将深入介绍DataSet的使用。

从Spark2.0开始,DataFrame成为了DataSet的特例,即DataFrame是DataSet的特殊情况。DataFrame是操作Row对象的DataSet。当数据集可以被编码成SparkSQL并且在编译时知道类型信息的时候可以使用DataSet。DataSet是混合了DataFrame和RDD的强类型分布式集合。

2.DataSet与DataFrame、RDD之间的相互转换

//DataFrame转DataSet
def fromDF(df: DataFrame): Dataset[Student] = {
    df.as[Student]
}
//DataSet转RDD
def toRDD(ds: Dataset[RawPanda]): RDD[RawPanda] = {
    ds.rdd
}
//DataFrame转DataSet
def toDF(ds: Dataset[RawPanda]): DataFrame = {
    ds.toDF()
}

在传统DataFrame上使用Dataset的原因之一是编译时强类型的。DataFrame具有运行时模式信息,但缺少有关模式的编译时信息。这种强类型在创建库时特别有用,因为您可以更清楚地指定输入的要求和返回类型。

3.深入理解Dataset API

Dataset API的主要优势之一是可以更轻松地与Scala和Java代码集成。这样既保留了DataFrame拥有更多信息的schema的优势,同时又可以像操作RDD一样灵活

3.1需求

下面通过一个简单的需求详细介绍如果灵活使用DataSet API。

需求:有一张学生表(id,name,age,score),求成绩大于80的学生的姓名及成绩

3.2类RDD编程

DataSet使用与RDD函数类似的函数签名如:filter,map,mapPartitions和flatMap等。

//DataSet的类RDD操作:
case class Stu2(name:String, id:Int, age:Int, score:Int)
def testDataSet(session: SparkSession): Unit = {
    //用于隐式转换
    import session.implicits._
    //加载mysql数据库中的数据进行测试
    val kTopic = session.read.format("jdbc")
    .option("url", MY_URL)
    .option("dbtable", MY_DBTABLE)
    .option("driver", MYSQL_DRIVER)
    .option("user", MY_USER)
    .option("password", MY_PASSWD)
    val wlTable = kTopic.load() 
    val dsStu2 = wlTable.as[Stu2] //将DataFrame转为Student类型的DataSet
    //使用类RDD操作方式将成绩大于80的学生的姓名和成绩筛选出来
    val likeRDD = dsStu2.filter(row => row.score > 80).map(row => (row.name, row.score))
    likeRDD.show(false) //likeRDD类型是DataSet[(String,Int)]
}

3.3类DataFrame操作

上面是类RDD的操作,DataSet还有类DataFrame的关系型操作:

//DataSet的类DataFrame操作
case class Stu2(name:String, id:Int, age:Int, score:Int)
def testDataSet(session: SparkSession): Unit = {
    import session.implicits._
    val kTopic = session.read.format("jdbc")
    .option("url", MY_URL)
    .option("dbtable", MY_DBTABLE)
    .option("driver", MYSQL_DRIVER)
    .option("user", MY_USER)
    .option("password", MY_PASSWD)
    val wlTable = kTopic.load() 
    val dsStu2 = wlTable.as[Stu2] 
  
    //使用类RDD操作方式将成绩大于80的学生的姓名和成绩筛选出来,下面两行完全一样
    val likeDF1 = dsStu2.select(col("name"),col("score")).where(col("score")>80)
    val likeDF2 = dsStu2.select($"name",$"score" ).where($"score" > 80)
    likeDF1.show() //likeDF1 ==>DataSet[Row]
    likeDF2.show() //likeDF2 ==>DataSet[Row]
}
//类RDD和类DataFrame混编,likeRDD是上面类RDD编程中最后得到的变量,为了方便直接用了
likeRDD.orderBy(col("_2") )//likeRDD是用的类RDD编程。但是orderBy很显然是类DataFrame编程,这种情况可以

其实已经注意到了,上面两种方式可以得到相同的效果,但是变量的类型韩式不尽相同的。比如dsStu2.select(col("name"),col("score"))虽然dsStu2是DataSet类型但是通过select函数以后变成了DataFrame。

即某些操作(例如select)同时具有类型化和未类型化的实现。如果您提供的是列而不是通过TypedColumn,将获得一个DataFrame而不是一个Dataset。

4.总结

DataSet是Spark编程模型中的核心概念之一,拥有极高的性能。同时DataSet用于比RDD更多的schema信息,比DataFrame更灵活的操作数据集方式,是开发Spark程序的首选。

 

Spark编程核心:从RDD原理到性能优化的实战指南 在大数据处理领域,分布式计算框架是处理海量数据的核心技术。其核心原理在于将计算任务分解并分发到集群的多个节点上并行执行,通过内存计算和优化执行计划来提升性能。这种技术为实时数据分析、机器学习等场景提供了强大的算力支持。理解弹性分布式数据集(RDD)的编程模型、转换与行动算子的区别,以及宽窄依赖对作业执行的影响,是编写高效Spark程序的基础。本文聚焦于Spark性能优化,深入探讨如何避免常见的Shuffle陷阱、解决数据倾斜问题,并通过算子选择(如reduceByKey优于groupByKey)和内存管理策 阅读详情

相关推荐

深入理解Apache Spark核心概念:从RDD到DataFrame的实践指南

从MapReduce的磁盘I/O瓶颈出发,引出Apache Spark作为统一大数据计算引擎的价值。Spark通过内存计算与DAG调度,将中间结果驻留内存,显著提升迭代式作业性能。RDD作为底层弹性分布式数据集,具备分区、不可变与惰性求值特性;而DataFrame/Dataset引入Schema与Catalyst优化器,让结构化查询更高效。理解Driver、Executor与Cluster Manager的分工,以及窄依赖与宽依赖对Stage划分的影响,是掌握分布式作业执行的关键。在实际开发中,合理使用sp

weixin_29061425的博客 80

大数据编程期末大作业

学校大数据编程期末大作业(详细答案及解析),答案仅供参考。

北天的博客 9977

Spark简介:从入门到精通

1. 背景介绍 1.1 大数据时代的挑战与机遇 随着互联网的普及和数据产生速度的加快,大数据时代已经到来。大数据带来了巨大的挑战,如何有效地处理、分析和利用这些数据成为企业和研究机构的关键问题。同时,大数据也为我们提供了前所未有的机遇,通过对海量数据的挖掘,可以帮助我们更好地了解世界,优化决策

AI天才研究院 250

Python 数据分析2019陕西高考(理工)成绩及填写志愿 !

1.背景 侄子今年高考, 我姐说:既然你会数据分析, 耐组给咱分析一哈!(关中方言) 2.录取分数线 纳尼?三本呢? 三本不存在的, 2019年陕西省二本生吞了三本。 数据不难找,度娘来帮忙, 将近几年图片表格转换整理: Python学习交流群:1004391443 亮一下神器Python之Pandas+Bokeh...

Pythoncxy的博客 1119

Spark学习Demo:Java环境下大数据处理实战项目

在特定业务中,标准分区器无法满足需求。例如按地域、时间窗口或用户等级划分数据时,需实现自定义。DataFrame本质上是一个带有命名列的分布式数据集,其每行遵循预定义的Schema。Spark支持两种Schema构建方式:自动推断与手动定义。自动推断示例(JSON源):输出:root虽然便捷,但推断可能导致精度丢失(如整数误判为long)、性能下降(全量扫描样本)等问题。因此推荐在生产环境中使用StructType显式定义Schema:});其中,false。

weixin_42600407的博客 1308

多电平双向DC/DC直流变换器的工作原理(以三电平为例子)

多电平双向DCDC变换器的工作原理一、所用论文和参考文献1.1 主要是中文的文献二、工作原理和重要概念2.1 飞跨电容的作用2.2 三电平的工作原理1.3 多电平的优点二,一些注意点2.1 电感电流的变化2.2 多飞跨电容 多余三个电平的时候的解释(截图居多) 一、所用论文和参考文献 1.1 主要是中文的文献 用于超级电容储能系统的三电平双向直流变换器及其控制 (期刊) 多电平直流变换器及其控制...

qq_32419593的博客 2万+

Python数据分析与处理——北京高考分数线统计分析

北京高考分数线统计分析 为了帮助广大考生和家长了解高考历年的录取情况,很多网站都汇总了各省市的录取控制分数线,为广大考生填报志愿提供参考。因受多种因素影响,每年的分数线或多或少会有一些变动。采集北京2006-2019年的信息。使用Python的Pandas库完成以下数据分析。 1.1 数据爬取 包含三部分内容:从哪里爬取,如何爬取,爬取的结果 代码: import pandas as pd import numpy as np data=pd.read_excel("scores.xlsx",heade

qq_46258465的博客 1万+

rk3326 MIPI休眠唤醒黑屏有背光问题

** 1.问题现象: ** **【开机起来】**开机起来可以正常显示 **【按power按键休眠】**第二次按下Power按键进入休眠,隔10s,再按Power按键唤醒。 **【出现结果】**屏幕黑屏有背光,并提示drm time out错 **【lcd信息】**lcd为480*800 2lane的mipi **【复现概率】**第二次按下休眠唤醒必然复现 【具体错误log如下】 //第一次休眠的log// [ 54.858511] dw-mipi-dsi ff450000.dsi: final DSI-

Ian22l的博客 3944

spark使用DataSet

本文中,我们介绍了Spark的基本概念,并通过spark shell演示了spark中的核心Api DataSet的使用。 在后面的文章中将会介绍spark中两个重要的扩展库Spark SQL和StructruedStreaming等,它们为数据的处理提供了更加方便和强大的操作。 Spark依然处于快速发展阶段中,其提供的功能可能随着版本的演进也会在不停的演进,就如RDD被DataSet替换,...

serenysdfg的博客 718

电赛控制-----经验分享

1.赛前准备 先简单介绍一下电赛。电赛是两年一届,单数年是大电赛,全称是全国大学生电子设计大赛,之前由瑞萨电子赞助,所以之前也叫瑞萨杯,从19年开始赞助方变成了TI公司,偶数年是小电赛,全称是“TI杯”模电邀请赛,(这里不得不提TI公司的实力是愈来愈大了),一般来说小电赛的含金量会略低于大电赛,而且对与想拿国奖的同学来说还是要参加大电赛,因为小电赛一般每个学校会限制只有两个队伍进国赛,而大电赛是没有这个限制的,而且我们学校电赛保研的话,大电赛只要求国二,而小电赛只有国一才可以保,这样难度就增加了很多。..

qq_35656655的博客 1万+

【180609】剑侠情缘_整套源码+地图编辑器(单机学习例子)

剑侠情缘_整套源码+地图编辑编(单机学习例子)完整源码下载地址:点击下载备用下载地址:点击下载

资源小站 6277

Spark中的RDD、DataFrame、DataSet简单总结

三者概念 RDD(Resilient Distributed DataSet) 弹性分布式数据集,是Spark中最基本的数据处理模型。在代码中是抽象类,代表一个弹性的、不可变、可分区、里面的元素可并行计算的集合。 弹性 存储的弹性:内存与磁盘的自动切换; 容错的弹性:数据丢失可以自动恢复; 计算的弹性:计算出错重试机制; 分片的弹性:可按需重新分片 不可变 RDD封装了计算逻辑不可改变,只能通过产生新的RDD并在新的RDD里面封装计算逻辑以此来改变 数据抽象 是一个抽象类,需要子类具体

Airy的博客 2745

【PCIe 总线及设备入门学习专栏 6.1 -- PCIe MCTP】

MCTP 是由 DMTF(Distributed Management Task Force)定义的协议,用于提供设备和主机间基于不同传输层(如 PCIe、I²C、USB 等)的管理消息通信能力。在 PCIe 环境下,MCTP 消息作为的一种特殊形式传输,并被赋予唯一的 VDM Code 值0000b,以区别于其他 VDM。MCTP 在 PCIe 环境中作为一种基于 Type 1 VDM 的管理通信协议,提供了设备与主机之间的灵活数据传输能力。

CodingCos的博客 2127

一、Spark简明笔记

目录1、Spark概述2、Spark体验2.1 Maven项目相关配置2.2 Spark运行环境2.2.1 Local模式2.2.2 Standalone模式2.2.3 Yarn模式2.3 部署模式的比较2.4 常用端口号3、Spark核心编程3.1 RDD3.1.1 RDD的定义3.1.2 RDD的核心属性3.1.3 基础编程3.1.3.1 RDD创建3.1.3.2 RDD并行度与分区3.1....

Norni的博客 1323

R语言caret拟合模型:train函数构建xgBoost Dart模型、模型调优、自定义设置trainControl函数和tuneLength参数

R语言caret拟合模型:train函数构建xgBoost Dart模型、模型调优、自定义设置trainControl函数和tuneLength参数

statistics+insight+vista+power 528

Spark--如何理解RDD

rdd是对数据集的逻辑表示,本身并不存储数据,只是封装了计算逻辑,并构建执行计划,通过保存血缘关系来记录rdd的执行过程和历史(当一个rdd需要重算时,系统会根据血缘关系追溯到最初的数据源,重建丢失的数据),调用行动算子时,会从数据源读取数据并进行计算。

2301_77948840的博客 2197

caverdock如何使用,一文给你多方案教学!

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 1384

Spark核心技术解析:从RDD到Dataset的演进与实践

深入解析Spark三大数据抽象,助你掌握大数据处理核心技术

递归尽头是星辰 1104

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Apache Spark官方文档中文版终极指南:从新手到专家的完整学习路径

Apache Spark官方文档中文版是学习和掌握这一强大大数据处理框架的终极资源。无论你是刚接触大数据处理的新手,还是希望深入理解Spark内部机制的专业开发者,这份完整的中文文档都能为你提供清晰的指引和全面的技术指导。Spark作为目前最流行的大数据处理引擎之一,其官方文档中文版为中文开发者扫除了语言障碍,让你能够快速上手并深入掌握Spark的各个核心功能模块。 ## 🚀 Spark中文文

gitblog_00399的博客 912

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

spark用python编程的书_PySpark实战指南:利用Python和Spark构建数据密集型应用并规模化部署...

译者序前言关于作者第1章 了解Spark1.1 什么是Apache Spark1.2 Spark作业和API1.2.1 执行过程1.2.2 弹性分布式数据集1.2.3 DataFrame1.2.4 Dataset1.2.5 Catalyst优化器1.2.6 钨丝计划1.3 Spark 2.0的架构1.3.1 统一Dataset和DataFrame1.3.2 SparkSession介绍1.3.3 ...

weixin_39645041的博客 554

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

探索Haskell中的分布式数据处理:distributed-dataset

探索Haskell中的分布式数据处理:distributed-dataset 项目介绍 distributed-dataset 是一个纯Haskell编写的分布式数据处理框架,灵感来源于业界知名的Apache Spark。该项目旨在为Haskell开发者提供一个高效、灵活的分布式数据处理工具,使得开发者能够在Haskell生态系统中轻松处理大规模数据集。 项目技术分析 核心组件 Dataset...

gitblog_01055的博客 547

Spark大数据处理入门:从核心概念到实战调优全解析

分布式计算引擎是现代大数据处理的核心技术,它通过将海量数据任务拆分并行执行,解决了单机处理能力不足的瓶颈。其原理基于将计算逻辑分发到集群节点,并汇总结果,从而实现了对TB级数据的高效分析。这一技术为数据密集型应用提供了基础支撑,广泛应用于实时监控、用户行为分析和机器学习训练等场景。Apache Spark作为领先的统一计算引擎,通过RDD和DataFrame等编程模型,封装了分布式计算的复杂性,并借助Catalyst优化器与Tungsten执行引擎提升性能。本文聚焦于Spark的部署模式、编程抽象及性能调优

weixin_33724059的博客 400

Spark基础入门教程(100问答)

本文整理了一份全面的Spark学习指南,包含100道核心问题及答案,涵盖Spark基础概念、RDD操作、DataFrame/DataSet、Spark SQL/Streaming、性能优化、部署配置等关键知识点。问题按主题分类,从基础概念到高级应用层层递进,适合不同阶段的Spark学习者系统掌握。每道问题均配有详细解答链接,帮助读者深入理解Spark的架构原理、编程实践和优化技巧。通过这份教程,读者可以快速掌握Spark的核心技术栈,提升大数据处理能力。

大剑师兰特的GIS世界 1138

大数据分析入门课程8--Spark基础

本文为《大数据分析师入门课程》系列的第8篇,主要讲解大数据分析师必须了解的Spark基础知识,前7篇分别是JAVA基础、SCALA基础、SQL基础、SQL进阶、HIVE基...

大数据与人工智能 804

搞懂 PySpark 核心组件:RDD、DataFrame 与 Dataset 的区别与用法

RDD、DataFrame 和 Dataset 是 PySpark 的三大支柱:RDD 提供基础控制,DataFrame 提升结构化处理效率,Dataset 在类型安全语言中增强可靠性。在 PySpark 中,DataFrame 是首选,它平衡了易用性和性能。掌握它们的区别后,您能更灵活地选择工具,应对不同数据挑战。建议从简单项目入手,逐步实践。如果您有具体场景问题,欢迎进一步讨论!

ghjckjkjkjk的博客 663
上一篇: Kerberos认证原理
下一篇: Spark SQL批处理窗口函数的使用
iFence
博客等级 码龄9年 8051粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值