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

camera 知识速查

本文总结了Camera开发中的常见问题排查方法和关键技术点。主要内容包括:I2C/MIPI不通的排查步骤、时序问题分析方法、Sensor/AF/Flash/PDAF的Bring Up流程、OTP调试方法、PDAF原理及调试、CTS/ITS问题解决思路、AE震荡解决方案、Systrace性能分析方法、Flicker产生原理、Tombstone问题定位等。还涉及V4L2框架解析、问题定位分层方法、Sensor Setting注意事项、时钟信号概念、第三方应用卡顿排查、大光圈概念、Monkey测试方法。

qq_41665131的博客 783

几款常见存储系统的对比分析

如何对比选择存储系统?本文给你答案!本文将详细对比NetApp、Lsilon、Vast Data、DDN lustre和WekaFS的五个存储系统的简单性、速度、规模及标准。

hongcloudtech的博客 1679

Spark-RDD / DataFrame

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

iqizum的博客 1852

DIY等离子环:从Class-E电路到七彩辉光,手把手教你打造炫酷科学玩具

本文手把手教你DIY一个炫酷的等离子环科学玩具。从解析等离子体辉光放电原理入手,详细介绍了核心的Class-E自激振荡电路设计、关键元件选型与参数计算,并提供了从物料准备、电路搭建、腔体密封到上电调试的全流程指南。通过调制电路或填充不同气体,还能实现七彩变换与交互效果,是学习高频电路与电磁场知识的绝佳实践项目。

weixin_29305337的博客 634

Spark RDD、DataFrame和DataSet的区别

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

6万+

Web自动化神操作:如何用OpenCV 破解滑块验证码?

验证码作为一种安全机制,可以有效防止暴力破解密码、发帖、灌水、刷票等,大家在做 Web 自动化的时候应该有碰到验证码这个难题,一般我们可以和开发沟通请求他们的帮助:去掉验证码或者设置一个万能验证码,而如果开发不帮忙我们该如何去解决呢? 本篇文章以 Java 语言为例教你怎么破解验证码。 现在大多数网址会采用滑块验证码的方式,下面以腾讯的滑块验证码为例,先来看看破解的效果: 要破解滑块验证码,我们一般采取的思路如下: 获取滑块到背景缺口图的距离 通过 selenium 的 Actio

不喝枸杞的程序员 2036

Cursor集成Claude 4.6免费版:本地IDE合规调用指南

大语言模型编程助手(LLM Copilot)已成为现代开发标配,其核心能力依赖于上下文理解、代码推理与结构化输出等关键技术原理。Anthropic官方提供的Claude系列模型,尤其Claude 4.6,凭借200K超长上下文、tool use函数调用和严格可控的API设计,在工程实践中展现出显著技术价值。该能力可无缝嵌入本地IDE环境,支撑代码解释、跨文件分析、单元测试生成等高频开发场景。本文聚焦Cursor这一开源可审计IDE,详解如何合规复用Anthropic免费tier接口(/v1/messages

weixin_34095889的博客 537

pyspark:RDD和DataFrame

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

7646

蓝牙6.0的‘新雷达’:Channel Sounding信道探测,真能比UWB更香吗?

本文探讨了蓝牙6.0的Channel Sounding信道探测技术在室内定位领域的应用潜力。通过与UWB技术的对比分析,揭示了其在成本、功耗和兼容性方面的优势,特别是在智能门锁、物品追踪等场景中的商业价值。Channel Sounding技术不仅具备亚米级精度,还能通过现有蓝牙设备实现零边际成本部署,为物联网应用提供了新的解决方案。

weixin_29288313的博客 332

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

【Qt实战项目】记事本完整项目

效果图如下所示: 全部代码如下: #include “notepad.h” #include int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.showMaximized(); return a.exec(); }

YIZHILIUSHA2020的博客 575

HRNet 【demo 复现过程】

Deep High-Resolution Representation Learning for Human Pose Estimation

qq_45257495的博客 5556

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

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

guihua55的博客 9097

计算机控制技术及应用

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

Spark RDD转换成DataFrame的两种方式

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

libaowenBlog的博客 5013

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

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

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

w112112_的博客 2012

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

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、付费专栏及课程。

余额充值