Spark RDD/DataFrame map保存数据的两种方式

pyspark 数据处理的三种方式RDD、DataFrame、Spark SQL案例 上一篇对pyspark的一些常用函数做了梳理,这篇主要是针对RDD、DataFrame、SparkSql三种实现同一功能需要的方式做一梳理,通过实际动手,体会不同方式在数据处理过程中的差异性、便利性。 阅读详情

使用Spark RDD或DataFrame,有时需要在foreachPartition或foreachWith里面保存数据到本地或HDFS。

直接保存数据

当然如果不需要在map里面保存数据,那么针对RDD可以有如下方式

val rdd = // target rdd
rdd.saveAsHadoopFile // add some parameters 

针对DataFrame可以有如下方式保存数据

val df = // target dataframe
// 保存中间数据
df.registerTempTable("temp table name")

// 持久化数据
df.save // 使用save函数,指定模式等参数
df.saveAsParquetFile    // depressed
df.saveAsTable  // depressed

foreach里面保存数据

调用foreachXXX之后,里面的每条记录都是Iterator[YYY]形式的数据,是可迭代数据。

保存到文件

保存到文件相对简单,可以直接使用上面的save保存,例如

def save2HDFS(sc: SparkContext, input: Iterator[Row]): Unit = {
    val result = input.map(item => item.getString(0) + "," + item.getInt(1)).toSeq
    val tmpRDD = sc.parallelize(result)
    tmpRDD.saveAsObjectFile("//path") // 1
    tmpRDD.saveAsTextFile("//path") // 2
    tmpRDD.saveAsTextFile("",CompressClass) // 3 内容编码类,继承自org.apache.hadoop.io.compress.CompressionCodec
  }

保存到数据库

在foreachXXX里面,可以将数据保存到数据库,这里使用的方式为JDBC的方式。

 def save2DB(input: Iterator[Row]): Unit = {

    var temp: Row = null
    while (input.hasNext) {
      temp = input.next // 将迭代数据保存为入库数据
    }

    var dbconn: Connection = null
    var stmt: Statement = null
    try {
      dbconn = DriverManager.getConnection("", "", "")
      stmt = dbconn.createStatement()
      stmt.execute("truncate table TableName")
    } catch {
      case e: Exception => {
        // println(">>>>>>>>>>>>清空表失败")
        // e.printStackTrace()
      }
    } finally {
      { // close connection
        if (stmt != null)
          stmt.close()
        if (dbconn != null)
          dbconn.close()
      }
      { // modify poiner to NULL
        stmt = null
        dbconn = null
      }
    }
  }

DataFrame读入写出操作

DataFrame可以方便的将要各种数据源的数据,读入到内存中,也可以方便的将DF数据写为各种格式的数据。

读入操作

sqlContext.read.jdbc// JDBC数据源
sqlContext.read.json// JSON数据源
sqlContext.read.parquet// Parquet数据源

写出操作

val tarDF =  // target dataframe 
tarDF.write.jdbc// 写入JDBC数据库
tarDF.write.json// 写入JSON数据源
tarDF.write.parquet// 写入Parquet数据源

以上几种数据源,是Spark自身带有驱动程序的。其他文件格式,需要相应的驱动程序,或相应的安装包支持。

论RDD、DataSet、DataFrame关系及优劣 前面已经给大家深入的讲解过RDD、DataSet、DataFrame的概念已经用法,那么到底这三者有什么关联呢?各自都有什么优劣?带着这这样的问题,今天小编就给大家详细的概述下。 在spark中,基本每次都会用到这三个类型,因为这是spark最常用的数据类型。 相同点 1、RDD、DataFrame、Dataset全都是spark平台下的分布式弹性数据集,为处理超大型数据提供便利 2、三者都有惰性机制,在进行创建、转换,如map方法时,不会立即执行,只有在遇到Action算子如foreach时,三者才会开始 阅读详情

相关推荐

Spark之RDD转换为DataFrame

一、利用反射机制推断RDD模式 利用反射机制来推断包含特定类型对象的RDD模式,适合用于对已知数据结构的RDD转换。 在“/usr/local/spark/examples/src/main/resources/”目录下,有个Spark安装时自带的样例数据people.txt, 其内容为:。 现在要把people.txt加载到内存中生成一个DataFrame,并查询其中的数据。完整执行过程...

TSY_1222的博客 1387

DataFrame(11):数据转换——map()函数的使用

1、map()函数 1)map()函数作用 将序列中的每一个元素,输入函数,最后将映射后的每个值返回合并,得到一个迭代器。 2)map()函数原理图 原理解释: 上图有一个列表,元素分别是从1-9。map()函数的作用就是,依次从这个列表中取出每一个元素,然后放到f(x)函数中,最终得到一个通过函数映射后的结果。 3)map()内置函数和Series的map()方法 ① map作为python内置函数的用法 说明:依次取出序列(iterable)中的每一个元素,放到函数(function)中,最终得到一

geejkse_seff的博客 6072

Spark入门:从RDD转换得到DataFrame

Spark官网提供了两种方法来实现从RDD转换得到DataFrame,第一种方法是,利用反射来推断包含特定类型对象的RDD的schema;第二种方法是,使用编程接口,构造一个schema并将其应用在已知的RDD上。 利用反射机制推断RDD模式 在利用反射机制推断RDD模式时,需要首先定义一个case class,因为,只有case class才能被Spark隐式地转换为DataFrame。 下...

影密卫 1160

Spark-将Map转换为单行DataFrame

scala-Map以key作列名,value作列值转成DataFrame

chase_97的博客 1018

Spark之RDD、DataSet、DataFrame转换

前面已经给大家说过RDD、DataSet、DataFrame三者之间的关系以及区别,各自都有各自的优劣。RDD、DataFrame、Dataset三者有许多共性,有各自适用的场景常常需要在三者之间转换。今天就给大家说说他们直接按的无缝转换。 DataFrame/Dataset转RDD 这个转换很简单,只需要在类型的后面.rdd就可以转换成RDD。 如何创建DataFrame/Dataset的方法在前面已经说过在这里就不多说了。 val createDS = spark.createDataset(1 to

zp17834994071的博客 1004

Spark DataFrame 转换为 Map 字典

有时候,我们可能需要将 DataFrame 转换为 Map 字典的形式,以便于进行快速的键值查找和操作。本文将介绍如何使用 Spark 的 DataFrame API 将 DataFrame 转换为 Map 字典,并提供相应的源代码示例。因此,在实际生产环境中,我们应该根据需要谨慎使用该方法,并考虑使用其他更适合大规模数据处理的技术和工具,如 Spark 的分布式数据处理能力。然后,我们可以遍历数组中的每一行,提取出键值对,并将其添加到一个新建的 Map 对象中。然后,我们使用 DataFrame 的。

DevSavantX的博客 580

java dataframe map_Spark DataFrame 开发指南

DataFrame 是 Spark 在 RDD 之后新推出的一个数据集,从属于 Spark SQL 模块,适用于结构化数据。对于我们这些用惯了数据库表和散列/字典结构的人来说,尤为亲切。女神镇楼可以直接读取关系型数据库产生 DataFrame:from pyspark.sql import SparkSessionspark = SparkSession \.builder \.appName("...

weixin_29019241的博客 825

Spark中的空分区和foreachPartition的执行

有时候,在一个Spark作业中,会出现一些分区没有数据的情况,我们把这样的分区称为空分区。是Spark中的一个操作,它可以对RDD或DataFrame中的每个分区执行自定义的操作。操作不会产生额外的开销,因为空分区的迭代器是空的,函数体不会执行任何操作。是一个Spark操作,用于对RDD或DataFrame中的每个分区执行自定义的操作。空分区的迭代器是空的,因此在对空分区执行。操作时,你会发现只有非空分区的数据被打印出来,而空分区没有任何输出。操作时,可以在每个分区上进行批量操作,提高作业的性能。

PixelLogic的博客 501

Spark中RDD、DataFrame和DataSet的区别与联系

RDD代表弹性分布式数据集。它是记录的只读分区集合。RDD是Spark的基本数据结构。它允许程序员以容错方式在大型集群上执行内存计算。与RDD不同,数据以列的形式组织起来,类似于关系数据库中的表。它是一个不可变的分布式数据集合。Spark中的DataFrame允许开发人员将数据结构(类型)加到分布式数据集合上,从而实现更高级别的抽象。ApacheSpark中的Dataset是DataFrameAPI的扩展,它提供了类型安全(type-safe),面向对象(object-oriented)的编程接口。...

大数据 7893

Windows 24H2升级后eNSP AR_40报错40?VirtualBox虚拟化修复指南

虚拟化技术通过Hypervisor在操作系统与硬件间建立抽象层,使虚拟机能够共享物理资源。其核心原理依赖CPU的VT-x/AMD-V指令集,而Windows 24H2对内核隔离与驱动签名的强化会直接占用或拦截这些虚拟化资源。在工程实践中,VirtualBox作为Type-2型Hypervisor,常因内存完整性开启或版本过旧导致虚拟网卡创建失败,进而引发设备启动中断。典型场景包括网络仿真实验、多系统测试环境搭建等。当eNSP的AR_40路由器依赖VirtualBox引擎时,24H2的安全策略变更便会触发错误

weixin_34375251的博客 216

visual studio 2017编译Triangle库遇到的问题和解决办法

这段时间因为一个项目需要使用到Triangle这个三角剖分工具,需要在windows环境下进行对源码编译,中间踩了很多坑,特此记录下。 1、下载 下载链接是下边这个,需要翻墙 http://www.cs.cmu.edu/~quake/triangle.html 2、编译。。超。。。级。。。麻。。。烦。。。 在ubutu下安装一切顺利,完全没遇到什么麻烦,但是换到windows下就麻烦不断...

csubai07的博客 2439

Spark-RDD / DataFrame

1、:你可以使用方法从一个已有的 Scala 集合(如数组或列表)中创建。:你可以使用 Spark 提供的各种数据源来创建 RDD,比如文本文件、序列文件、JSON 文件、CSV 文件等。:你可以通过对已有的 RDD 进行各种转换操作来创建新的 RDD。

iqizum的博客 1852

Tina Linux WiFi驱动移植避坑指南:以RTL8733bs为例,详解设备树、Kconfig与固件依赖

本文详细解析了在Tina Linux上移植RTL8733bs WiFi驱动的关键步骤与常见问题,涵盖设备树配置、内核依赖、固件加载及启动时序等核心环节。通过实战案例和排查清单,帮助开发者规避SDIO控制器配置、电源管理、GPIO极性等典型陷阱,确保驱动稳定运行。

weixin_29164185的博客 262

Spark RDD、DataFrame和DataSet的区别

在比较这三者的区别之前,先看看他们各自的定义是什么。RDD是一种弹性分布式数据集,是一种只读分区数据。它是spark的基础数据结构,具有内存计算能力、数据容错性以及数据不可修改特性。Dataframe也是一种不可修改的分布式数据集合,它可以按列查询数据,类似于关系数据库里面的表结构。可以对数据指定数据模式(schema)。Dataset是DataFrame的扩展,它提供了类型安全,面向对象的编程接口。也就是说DataFrame是Dataset的一种特殊形式。

6万+

gm/Id 设计方法

本文介绍gm/Id方法的具体实现。

maxwell2ic的博客 4万+

SeetaFace6人脸活体检测C++代码实现Demo

活体检测是判断人脸图像是来自真人还是来自攻击假体(照片、视频等)的方法。 人脸识别系统存在被伪造攻击的风险。因此需要在人脸识别系统中加入活体检测,验证用户是否为真实活体本人操作,以防止照片、视频、以及三维模型的入侵,从而帮助用户甄别欺诈行为,保障用户的利益。

mickey2007的博客 3471

pyspark:RDD和DataFrame

作为数据挖掘工程师,以后必不可免要用到并行计算,pyspark是python操作spark的API,本人因此入了坑。 1 pyspark的安装 见我另一篇博客:https://blog.youkuaiyun.com/qq_23860475/article/details/90476197 2 spark概述 Spark 允许用户读取、转换和 聚合数据,可以轻松...

7646

Coze 上 OpenClaw 完整使用攻略(零代码 + 24 小时在线 + 飞书 / 微信接入)

Coze(扣子)是目前国内零门槛部署 OpenClaw 最友好的平台,无需服务器、不用命令行,5 分钟即可拥有可执行本地 / 云端任务的 AI 助手,还能一键发布到飞书、微信、钉钉等 IM。

hy行者勇哥的博客 2923

Spark RDD、DataFrame、Dataset相互转换

目录 1. RDD转DataFrame 2. RDD转DataSet 3. DataFrame/Dataset 转RDD 4. DataFrame转Dataset 5.Dataset转DataFrame 1. RDD转DataFrame 1. 构建schema 主要有三步: 构建RDD[Row] 构建schema 调用createDataFrame方法 object...

L, there! 8214

手把手教你学Simulink--复杂环境适应的四足机器人领域仿真建模实例:构建一个基于Simulink的四足机器人动态平衡保持仿真模型

通过上述步骤,你可以构建一个基本的基于Simulink的四足机器人动态平衡保持仿真模型。此模型不仅有助于理解四足机器人在复杂环境中的动态平衡控制原理,也为进一步优化提供了基础。随着技术的发展,还可以探索更多高级功能,如自适应步态调整、强化学习等,以提高机器人的智能性和适应性。

MHD0815的博客 236

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

RDD转换为DataFrame的两种方式详解

*Spark支持两种方法将存在的RDD转换为DataFrame(SchemaRDD)。 1.使用反射来推断包含特定对象类型的RDD的模式(schema) 在你写spark程序的同时,当你已经知道了模式,这种基于反射的 方法可以使代码更简洁并且程序工作得更好. Spark SQL的Scala接口支持将包含样本类的RDD自动转换SchemaRDD。这个样本类定义了表的模式。给样本类的参数名字通过反射来读取,然后作为列的名字。样本类可以嵌套或者包含复杂的类型如序列或者数组。这个RDD可以隐式转化为一个Sch

guihua55的博客 9097

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Spark RDD转换成DataFrame的两种方式

spark官方提供了两种方法实现从RDD转换到DataFrame。 第一种方法是利用反射机制来推断包含特定类型对象的Schema,这种方式适用于对已知的数据结构的RDD转换; 第二种方法通过编程接口构造一个 Schema ,并将其应用在已知的RDD数据中。.........

libaowenBlog的博客 5013

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

从RDD转换得到DataFrame的两种方式

1.利用反射机制推断RDD模式 在利用反射机制推断RDD模式时,需要首先定义一个case class, 因为只有case class 才能被Spark 隐式地转换为DataFrame

w112112_的博客 2012

Spark之DataFrame与RDD之间的两种转换方式

说明:在SparkSQL中读外部数据进行读取进行ETL操作时,首先读取的数据格式为RDD数据结构,因此我们一项主要目标就是将读取到的RDD格式转化为DataFrame。 RDD结构转化为DataFrame的形式主要分为两种:①反射②编程Row(StructType) package LogsAnalyse import org.apache.spark.sql.{Row, SparkSession} import org.apache.spark.sql.types.{IntegerType, St

qq_41420150的博客 2077

Spark rdd转Dataframe的三种方法

Spark rdd转Dataframe的三种方法数据准备RDD转Dataframe的三种方式通过RDD推断创建dataframe通过StructType创建dataframe通过定义schema类创建dataframe 数据准备 练习数据为电影推荐系统的数据,该部分数据收集了不同时间段的数据,我们可以根据电影分析业务需求下载不同规模大小的数据源文件。下载地址为:https://grouplens....

sunyiyuan1213的博客 7820
上一篇: HTML全文转化为PDF技术选型研究与流行方法汇总
下一篇: Crontab整点运行问题
大数据运维
博客等级 码龄18年 26粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值