day61-Spark SQL数据加载和保存内幕深度解密实战

Spark SQL加载数据

SparkSQl 数据输入输入输出主要是DataFrame,DataFrame提供了一些通用的load和save操作。

通过load可以创建出DataFrame;通过save可以将DataFrame数据保存到文件中或者说以具体的格式来指明要读取的文件是什么格式或者输出的数据是什么格式;直接读取 文件的指定类型:

SQLContext源码:

load 和save方法

@deprecated("Use read.load(path). This will be removed in Spark 2.0.",
"1.4.0")

def load(path:String): DataFrame = {

read.load(path)

}

/**

* Returns the dataset stored at path asa DataFrame, using the given data source.

*

* @group genericdata

* @deprecated As of 1.4.0,replaced by `read().format(source).load(path)`.

*             This will be removed in Spark 2.0.

*/

@deprecated("Useread.format(source).load(path). This will be removed in Spark 2.0.",
"1.4.0")

def load(path:String,
source:String): DataFrame = {

read.format(source).load(path)

}

DataFrameReader源码:

/**
 * Specifies the input data source format.
 *
 * @since 1.4.0
 */
def format(source: String): DataFrameReader = {
  this.source = source
  this
}

* Loads input inas a
[[DataFrame]],for data sources that don‘t require a path (e.g. external

* key-value stores).

*

* @since 1.4.0

*/

def load(): DataFrame = {

val resolved=
ResolvedDataSource(

sqlContext,

userSpecifiedSchema = userSpecifiedSchema,

partitionColumns = Array.empty[String],

provider = source,

options = extraOptions.toMap)

DataFrame(sqlContext, LogicalRelation(resolved.relation))

}

ResolvedDataSource源码

object
ResolvedDataSource extends
Logging {

/** A map to maintain backward compatibility in case wemove data sources around. */

private val backwardCompatibilityMap
= Map(

"org.apache.spark.sql.jdbc" ->
classOf[jdbc.DefaultSource].getCanonicalName,

"org.apache.spark.sql.jdbc.DefaultSource"
-> classOf[jdbc.DefaultSource].getCanonicalName,

"org.apache.spark.sql.json" ->
classOf[json.DefaultSource].getCanonicalName,

"org.apache.spark.sql.json.DefaultSource"
-> classOf[json.DefaultSource].getCanonicalName,

"org.apache.spark.sql.parquet" ->
classOf[parquet.DefaultSource].getCanonicalName,

"org.apache.spark.sql.parquet.DefaultSource"
-> classOf[parquet.DefaultSource].getCanonicalName

)

可以直接读取数据格式:jdbc,parquet

def
apply(

sqlContext: SQLContext,

provider: String,

partitionColumns: Array[String],

mode: SaveMode,

options: Map[String,
String],

data: DataFrame): ResolvedDataSource = {

DataFramtWriter源码:

/**

* Specifies the behavior when data ortable already exists. Options include:

*  - `SaveMode.Overwrite`: overwrite the existing data.

*  - `SaveMode.Append`:append the data.

*  - `SaveMode.Ignore`:ignore the operation (i.e. no-op).

*  - `SaveMode.ErrorIfExists`: default option, throw an exception at runtime.

*

* @since 1.4.0

*/

def mode(saveMode: SaveMode): DataFrameWriter = {

this.mode
= saveMode

this

}

import java.util.ArrayList;
import java.util.List;

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.DataFrame;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.RowFactory;
import org.apache.spark.sql.SQLContext;
import org.apache.spark.sql.types.StructField;

/**
 * @author 作者 E-mail:
 * @version 创建时间:2016年5月8日 上午7:54:28 类说明
 */
public class SparkSQLLoadSaveOps {

    public static void main( String[] args ) {
        SparkConf conf = new SparkConf().setMaster( "local" ).setAppName( "rdd2d" );
        JavaSparkContext sc = new JavaSparkContext();
        SQLContext sqlContext = new SQLContext( sc );
        DataFrame peopleDF = sqlContext.read().format("json").load("D://person.json");
        peopleDF.select( "name" ).write().format( "json" ).save( "D://logs//personName.json" );

文件追加方式:是创建一个新文件还是append追加

时间: 2024-12-22 23:47:51

day61-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.JavaRD

6.Knockout.Js(加载或保存JSON数据)

前言 Knockout可以实现很复杂的客户端交互,但是几乎所有的web应用程序都要和服务器端交换数据(至少为了本地存储需要序列化数据),交换数据最方便的就是使用JSON格式 – 大多数的Ajax应用程序也是使用这种格式. 加载或保存数据 Knockout不限制你用任何技术加载和保存数据.你可以使用任何技术和服务器来交互.用的最多的是使用jQuery的Ajax帮助,例如:getJSON,post和ajax.你可以通过这些方法从服务器端获取数据: $.getJSON("/some/url"

实现虚拟模式的动态数据加载Windows窗体DataGridView控件 .net 4.5 (一)

实现虚拟模式的即时数据加载Windows窗体DataGridView控件 .net 4.5 原文地址 :http://msdn.microsoft.com/en-us/library/ms171624.aspx  译 Q:77811970 实现虚拟模式的原因之一 DataGridView控制只检索数据,因为它是必要的. 这就是所谓的 即时数据加载 . 如果你正在与一个非常大的表在一个远程数据库,例如,您可能希望避免启动延迟,只检索所需的数据显示和检索额外的数据只有当用户新行滚动到视图. 如果客户

浅谈Entity Framework中的数据加载方式

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 如果你还没有接触过或者根本不了解什么是Entity Framework,那么请看这里http://www.entityframeworktutorial.net/EntityFramework-Architecture.aspx,其中的一系列文

EF的三种数据加载方式

EF中有3种数据加载方式,具体如下: 延迟加载(默认): 设置导航属性为virtual 贪婪加载:不设置导航属性为virtual,并且对导航属性使用Include 显示加载:不设置导航属性为virtual,并且对导航属性使用Reference(单个对象).Load()或Collection(对象集).Load() public class Programm { public static void Main() { TestDbContext db = new TestDbContext();

ios的文件加载和保存

最近,一直在看比较基础的知识,因为感觉自己需要整理一下最基层的东西,然后才能系统的结合起来,很多时候我们做项目都需要对文件加载和保存,我自己对已有知识整理了一下: 1.使用属性列表保存对象: 在Cocoa中,与一类名为属性列表的对象,常简称为plist.这些列表包含Cocoa知道如何操作的一组对象.具体来讲,Cocoa知道如何将它们保存到文件中并进行加载.属性列表类包括:NSArray,NSDictionary,NSString和NSData,以及它们的变体(Mutable) NSAutorel

GreenPlum数据加载

1. copy命令 对于数据加载,GreenPlum数据库提供copy工具,copy工具源于PostgreSQL数据库,copy命令支持文件与表之间的数据加载和表对文件的数据卸载.使用copy命令进行数据加载,数据需要经过Master节点分发到Segment节点,同样使用copy命令进行数据卸载,数据也需要由Segment发送到Master节点,由Master节点汇总后再写入外部文件,这样就限制了数据加载与卸载的效率,但是数据量较小的情况下,copy命令就非常方便.下面测试通过copy命令实现操

20200113(数据加载、存储和文件格式)

6. 数据加载.存储和文件格式 输出输出通常包括几个大类: 读取文本文件和其他更高效的磁盘存储格式: 加载数据库中的数据: 利用Web API 操作网络资源. 这里着重介绍pandas的输入输出对象. 6.1  读取文本格式的数据 pandas 提供了一些用于将表格数据读取为DataFrame 对象的函数.如下: 上面这些函数的选项可以划分为以下几个大类: 其中,类型推断(type inference)是这些函数中最重要的功能之一,也就是说不需要指定列的类型到底是数值.整数.布尔值还是字符串.

Android5.1图库Gallery2代码分析数据加载流程

图片数据加载流程. Gallery---->GalleryActivity------>AlbumSetPage------->AlbumPage--------->PhotoPage 相册集                        照片集                 某张图片 1,AlbumSetPage.java private void initializeData(Bundle data) { String mediaPath = data.getString(A