iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Spark SQL数据加载和保存的实例分析
  • 218
分享到

Spark SQL数据加载和保存的实例分析

2024-04-02 19:04:59 218人浏览 泡泡鱼
摘要

今天就跟大家聊聊有关spark sql数据加载和保存的实例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、前置知识详解 Spark SQL重要

今天就跟大家聊聊有关spark sql数据加载和保存的实例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

一、前置知识详解 Spark SQL重要是操作DataFrame,DataFrame本身提供了save和load的操作, Load:可以创建DataFrame, Save:把DataFrame中的数据保存到文件或者说与具体的格式来指明我们要读取的文件的类型以及与具体的格式来指出我们要输出的文件是什么类型。

二、Spark SQL读写数据代码实战

import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.api.java.JavaSparkContext;import org.apache.spark.api.java.function.Function;import org.apache.spark.sql.*;import org.apache.spark.sql.types.DataTypes;import org.apache.spark.sql.types.StructField;import org.apache.spark.sql.types.StructType;import java.util.ArrayList;import java.util.List;public class SparkSQLLoadSaveOps { public static void main(String[] args) {  SparkConf conf = new SparkConf().setMaster("local").setAppName("SparkSQLLoadSaveOps");  JavaSparkContext sc = new JavaSparkContext(conf);  SQLContext = new SQLContext(sc);    DataFrame peopleDF = sqlContext.read().fORMat("JSON").load("E:\\Spark\\Sparkinstanll_package\\Big_Data_Software\\spark-1.6.0-bin-hadoop2.6\\examples\\src\\main\\resources\\people.json");    //通过mode来指定输出文件的是append。创建新文件来追加文件 peopleDF.select("name").write().mode(SaveMode.Append).save("E:\\personNames"); }}

读取过程源码分析如下: 1. read方法返回DataFrameReader,用于读取数据。

@Experimental//创建DataFrameReader实例,获得了DataFrameReader引用def read: DataFrameReader = new DataFrameReader(this)

2. 然后再调用DataFrameReader类中的format,指出读取文件的格式。

def format(source: String): DataFrameReader = { this.source = source this}

3. 通过DtaFrameReader中load方法通过路径把传入过来的输入变成DataFrame。

// TODO: Remove this one in Spark 2.0.def load(path: String): DataFrame = { option("path", path).load()}

至此,数据的读取工作就完成了,下面就对DataFrame进行操作。 下面就是写操作!!!

1. 调用DataFrame中select函数进行对列筛选

@Scala.annotation.varargsdef select(col: String, cols: String*): DataFrame = select((col +: cols).map(Column(_)) : _*)

2. 然后通过write将结果写入到外部存储系统中。

@Experimentaldef write: DataFrameWriter = new DataFrameWriter(this)

3. 在保持文件的时候mode指定追加文件的方式

def mode(saveMode: SaveMode): DataFrameWriter = { this.mode = saveMode this}

4. 最后,save()方法触发action,将文件输出到指定文件中。

def save(path: String): Unit = { this.extraoptions += ("path" -> path) save()}

三、Spark SQL读写整个流程图如下

四、对于流程中部分函数源码详解

DataFrameReader.Load()

1. Load()返回DataFrame类型的数据集合,使用的数据是从默认的路径读取。

@deprecated("Use read.load(path). This will be removed in Spark 2.0.", "1.4.0")def load(path: String): DataFrame = {//此时的read就是DataFrameReader read.load(path)}

2. 追踪load源码进去,源码如下:在DataFrameReader中的方法。Load()通过路径把输入传进来变成一个DataFrame。

// TODO: Remove this one in Spark 2.0.def load(path: String): DataFrame = { option("path", path).load()}

3. 追踪load源码如下:

def load(): DataFrame = {//对传入的Source进行解析 val resolved = ResolvedDataSource(  sqlContext,  userSpecifiedSchema = userSpecifiedSchema,  partitionColumns = Array.empty[String],  provider = source,  options = extraOptions.toMap) DataFrame(sqlContext, LogicalRelation(resolved.relation))}

DataFrameReader.format()

1. Format:具体指定文件格式,这就获得一个巨大的启示是:如果是Json文件格式可以保持为Parquet等此类操作。 Spark SQL在读取文件的时候可以指定读取文件的类型。例如,Json,Parquet.

def format(source: String): DataFrameReader = { this.source = source //FileType this}

DataFrame.write()

1. 创建DataFrameWriter实例

@Experimentaldef write: DataFrameWriter = new DataFrameWriter(this)1

2. 追踪DataFrameWriter源码如下:以DataFrame的方式向外部存储系统中写入数据。

@Experimentalfinal class DataFrameWriter private[sql](df: DataFrame) {

DataFrameWriter.mode()

1. Overwrite是覆盖,之前写的数据全都被覆盖了。 Append:是追加,对于普通文件是在一个文件中进行追加,但是对于parquet格式的文件则创建新的文件进行追加。

def mode(saveMode: SaveMode): DataFrameWriter = { this.mode = saveMode this}

2. 通过模式匹配接收外部参数

def mode(saveMode: String): DataFrameWriter = { this.mode = saveMode.toLowerCase match {  case "overwrite" => SaveMode.Overwrite  case "append" => SaveMode.Append  case "ignore" => SaveMode.Ignore  case "error" | "default" => SaveMode.ErrorIfExists  case _ => throw new IllegalArgumentException(s"Unknown save mode: $saveMode. " +   "Accepted modes are 'overwrite', 'append', 'ignore', 'error'.") } this}

DataFrameWriter.save()

1. save将结果保存传入的路径。

def save(path: String): Unit = { this.extraOptions += ("path" -> path) save()}

2. 追踪save方法。

def save(): Unit = { ResolvedDataSource(  df.sqlContext,  source,  partitioninGColumns.map(_.toArray).getOrElse(Array.empty[String]),  mode,  extraOptions.toMap,  df)}

3. 其中source是SQLConf的defaultDataSourceNameprivate var source: String = df.sqlContext.conf.defaultDataSourceName其中DEFAULT_DATA_SOURCE_NAME默认参数是parquet。

// This is used to set the default data sourceval DEFAULT_DATA_SOURCE_NAME = stringConf("spark.sql.sources.default", defaultValue = Some("org.apache.spark.sql.parquet"), doc = "The default data source to use in input/output.")

DataFrame.scala中部分函数详解:

1. toDF函数是将RDD转换成DataFrame

// This is declared with parentheses to prevent the Scala compiler from treating// `rdd.toDF("1")` as invoking this toDF and then apply on the returned DataFrame.def toDF(): DataFrame = this

2. show()方法:将结果显示出来

// scalastyle:off printlndef show(numRows: Int, truncate: Boolean): Unit = println(showString(numRows, truncate))// scalastyle:on println

追踪showString源码如下:showString中触发action收集数据。

private[sql] def showString(_numRows: Int, truncate: Boolean = true): String = { val numRows = _numRows.max(0) val sb = new StringBuilder val takeResult = take(numRows + 1) val hasMoreData = takeResult.length > numRows val data = takeResult.take(numRows) val numCols = schema.fieldNames.length

看完上述内容,你们对Spark SQL数据加载和保存的实例分析有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网数据库频道,感谢大家的支持。

您可能感兴趣的文档:

--结束END--

本文标题: Spark SQL数据加载和保存的实例分析

本文链接: https://www.lsjlt.com/news/69918.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Spark SQL数据加载和保存的实例分析
    今天就跟大家聊聊有关Spark SQL数据加载和保存的实例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、前置知识详解 Spark SQL重要...
    99+
    2022-10-19
  • Spark Streaming+Spark SQL的数据倾斜示例分析
    这篇文章将为大家详细讲解有关Spark Streaming+Spark SQL的数据倾斜示例分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.现象 三台机器都有产生executor,每台...
    99+
    2023-06-03
  • Spark中的数据读取保存和累加器实例详解
    目录数据读取与保存Text文件Sequence文件Object对象文件累加器累加器概念系统累加器数据读取与保存 Text文件 对于 Text文件的读取和保存 ,其语法和实现是最简单的...
    99+
    2022-11-13
    Spark数据读取保存累加器 Spark数据读取保存
  • Python下载商品数据并连接数据库且保存数据的示例分析
    这篇文章主要介绍了Python下载商品数据并连接数据库且保存数据的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言:开发环境:python 3.8pycharm 2...
    99+
    2023-06-29
  • bootstrap中Table+ajax加载数据和refresh更新数据的示例分析
    小编给大家分享一下bootstrap中Table+ajax加载数据和refresh更新数据的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!具体内容如下1.html<form&...
    99+
    2022-10-19
  • MySQL数据模型和SQL语言实例分析
    本篇内容主要讲解“MySQL数据模型和SQL语言实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL数据模型和SQL语言实例分析”吧!一、关系型数据...
    99+
    2022-10-19
  • SQL Server中的XML数据类型实例分析
    本篇内容主要讲解“SQL Server中的XML数据类型实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SQL Server中的XML数据类型实例分析”吧!SQL Se...
    99+
    2023-06-30
  • jquery中dataTable后台加载数据并分页的示例分析
    这篇文章主要为大家展示了“jquery中dataTable后台加载数据并分页的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“jquery中dataTab...
    99+
    2022-10-19
  • C++的数据共享与保护实例分析
    这篇文章主要讲解了“C++的数据共享与保护实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++的数据共享与保护实例分析”吧!1.作用域作用域是一个标识符在程序正文中有效的区域作用域关...
    99+
    2023-06-29
  • Android中的类文件和类加载器实例分析
    本篇内容介绍了“Android中的类文件和类加载器实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、Java中的类加载器首先花点时间...
    99+
    2023-06-30
  • SQL Server数据库中的表名称和字段实例分析
    这篇文章主要介绍“SQL Server数据库中的表名称和字段实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SQL Server数据库中的表名称和字段实例分析...
    99+
    2022-10-19
  • vue移动UI框架滑动加载数据的示例分析
    小编给大家分享一下vue移动UI框架滑动加载数据的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!效果展示先上一个gif图...
    99+
    2022-10-19
  • Android异步加载数据和图片的保存思路详解
    把从网络获取的图片数据保存在SD卡上, 先把权限都加上 网络权限 android.permission.INTERNET SD卡读写权限 android.permiss...
    99+
    2022-06-06
    数据 图片 Android
  • JVM的类加载器和双亲委派模式实例分析
    这篇文章主要讲解了“JVM的类加载器和双亲委派模式实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JVM的类加载器和双亲委派模式实例分析”吧!类加载器Java虚拟机设计团队有意把类加载...
    99+
    2023-06-29
  • MySQL数据库的触发器和存储过程实例分析
    这篇文章主要介绍“MySQL数据库的触发器和存储过程实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MySQL数据库的触发器和存储过程实例分析”文章能帮助大家解决问题。一、实验目的掌握某主流D...
    99+
    2023-07-02
  • vue中实例方法和数据的示例分析
    小编给大家分享一下vue中实例方法和数据的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.vm.$set问题描述:如何...
    99+
    2022-10-19
  • MySQL数据类型和存储机制的示例分析
    小编给大家分享一下MySQL数据类型和存储机制的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.1 数据类型概览数据类...
    99+
    2022-10-18
  • js中数据存储和DOM编程的示例分析
    这篇文章给大家分享的是有关js中数据存储和DOM编程的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。数据存储·在javascript中,数据存储的位置会对代码整体性能产生...
    99+
    2022-10-19
  • MySQL和Oracle的元数据抽取实例分析
    目录前言什么是元数据参考文档地址先说MySQL再说Oracle总结前言 最近接到个任务是抽取mysql和Oracle的元数据,大致就是在库里把库、schema、表、字段、分区、索引、...
    99+
    2022-11-12
  • MySQL数据库千万级数据查询和存储的示例分析
    这篇文章主要介绍MySQL数据库千万级数据查询和存储的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!百万级数据处理方案数据存储结构设计表字段设计表字段 not null,因为 null 值很难查询优化且占用额...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作