一、通用的load和save操作

1、概述

对于Spark SQL的DataFrame来说,无论是从什么数据源创建出来的DataFrame,都有一些共同的load和save操作。
load操作主要用于加载数据,创建出DataFrame;save操作,主要用于将DataFrame中的数据保存到文件中。
Java版本
DataFrame df = sqlContext.read().load("users.parquet");
df.select("name", "favorite_color").write().save("namesAndFavColors.parquet"); Scala版本
val df = sqlContext.read.load("users.parquet")
df.select("name", "favorite_color").write.save("namesAndFavColors.parquet")

2、java实现

package cn.spark.study.sql;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.sql.DataFrame;
import org.apache.spark.sql.SQLContext; /**
* 通用的load和save操作
* @author Administrator
*
*/ public class GenericLoadSave { public static void main(String[] args) {
SparkConf conf = new SparkConf()
.setAppName("GenericLoadSave");
JavaSparkContext sc = new JavaSparkContext(conf);
SQLContext sqlContext = new SQLContext(sc); DataFrame usersDF = sqlContext.read().load(
"hdfs://spark1:9000/users.parquet");
usersDF.select("name", "favorite_color").write()
.save("hdfs://spark1:9000/namesAndFavColors.parquet");
} }

3、scala实现

package cn.spark.study.sql

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.sql.SQLContext
import org.apache.spark.sql.DataFrame /**
* @author Administrator
*/ object GenericLoadSave { def main(args: Array[String]): Unit = {
val conf = new SparkConf()
.setAppName("GenericLoadSave")
val sc = new SparkContext(conf)
val sqlContext = new SQLContext(sc) val usersDF = sqlContext.read.load("hdfs://spark1:9000/users.parquet")
usersDF.write.save("hdfs://spark1:9000/namesAndFavColors_scala")
} }

二、手动指定数据源类型

1、java实现

package cn.spark.study.sql;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.sql.DataFrame;
import org.apache.spark.sql.SQLContext; /**
* 手动指定数据源类型
* @author Administrator
*
*/ public class ManuallySpecifyOptions { public static void main(String[] args) {
SparkConf conf = new SparkConf()
.setAppName("ManuallySpecifyOptions");
JavaSparkContext sc = new JavaSparkContext(conf);
SQLContext sqlContext = new SQLContext(sc); DataFrame peopleDF = sqlContext.read().format("json")
.load("hdfs://spark1:9000/people.json");
peopleDF.select("name").write().format("parquet")
.save("hdfs://spark1:9000/peopleName_java");
} }

2、scala实现

package cn.spark.study.sql

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.sql.SQLContext /**
* @author Administrator
*/
object ManuallySpecifyOptions { def main(args: Array[String]): Unit = {
val conf = new SparkConf()
.setAppName("ManuallySpecifyOptions")
val sc = new SparkContext(conf)
val sqlContext = new SQLContext(sc) val peopleDF = sqlContext.read.format("json").load("hdfs://spark1:9000/people.json")
peopleDF.select("name").write.format("parquet").save("hdfs://spark1:9000/peopleName_scala")
} }

三、Save Mode

1、概述

Spark SQL对于save操作,提供了不同的save mode。主要用来处理,当目标位置,已经有数据时,应该如何处理。而且save操作并不会执行锁操作,并且不是原子的,
因此是有一定风险出现脏数据的。

save mode

意义

SaveMode.ErrorIfExists (默认)

如果目标位置已经存在数据,那么抛出一个异常

SaveMode.Append

如果目标位置已经存在数据,那么将数据追加进去

SaveMode.Overwrite

如果目标位置已经存在数据,那么就将已经存在的数据删除,用新数据进行覆盖

SaveMode.Ignore

如果目标位置已经存在数据,那么就忽略,不做任何操作。

2、java实现

package cn.spark.study.sql;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.sql.DataFrame;
import org.apache.spark.sql.SQLContext;
import org.apache.spark.sql.SaveMode; /**
* SaveModel示例
* @author Administrator
*
*/
public class SaveModeTest { @SuppressWarnings("deprecation")
public static void main(String[] args) {
SparkConf conf = new SparkConf()
.setAppName("SaveModeTest");
JavaSparkContext sc = new JavaSparkContext(conf);
SQLContext sqlContext = new SQLContext(sc); DataFrame peopleDF = sqlContext.read().format("json")
.load("hdfs://spark1:9000/people.json");
peopleDF.save("hdfs://spark1:9000/people_savemode_test", "json", SaveMode.Append);
} }

37、数据源之通用的load和save操作的更多相关文章

  1. spark SQL学习(load和save操作)

    load操作:主要用于加载数据,创建出DataFrame save操作:主要用于将DataFrame中的数据保存到文件中 代码示例(默认为parquet数据源类型) package wujiadong ...

  2. load、save方法、spark sql的几种数据源

    load.save方法的用法          DataFrame usersDF = sqlContext.read().load("hdfs://spark1:9000/users.pa ...

  3. SparkSQL读写外部数据源-基本操作load和save

    数据源-基本操作load和save object BasicTest { def main(args: Array[String]): Unit = { val spark = SparkSessio ...

  4. spring spring data jpa save操作事务

    整合spring spring data jpa的时候,在save方法上加了@Transactional注解.此时调用springdatajpa save方法并不会真的把数据提交给数据库,而是缓存起来 ...

  5. Qt Load and Save Image Dialog 加载图片对话框

    在Qt中,我们想要通过对话框来打开某一个图片,可以通过使用QFileDialog来快速实现,参见以下代码: QString fileName = QFileDialog::getOpenFileNam ...

  6. Yii 2 load() 和 save()

    我这里用的数据库是mongo 数据库 为栗子: public function load($data, $formName = null) { $scope = $formName === null ...

  7. netcore XmlDocument 使用Load和Save方法

    string path ="C://xxx/file" XmlDocument xmlDoc = new XmlDocument(); #if NET462 xmlDoc.Load ...

  8. Qt Load and Save PCL/PLY 加载和保存点云

    Qt可以跟VTK和PCL等其他库联合使用,十分强大,下面的代码展示了如何使用Qt联合PCL库来加载和保存PCL/PLY格式的点云: 通过按钮加载点云: void QMainWindow::on_pb_ ...

  9. 解决tomcat运行报错java.lang.UnsatisfiedLinkError: apache-tomcat-7.0.37\bin\tcnative-1.dll:Can load AMD 64

    http://www.apache.org/dist/tomcat/tomcat-connectors/native/ 到该地址下下载一个tomcat-native-1.2.2-win32-bin压缩 ...

随机推荐

  1. golang ---调用window api函数执行程序

    package main import "syscall" import "unsafe" func main() { var hand uintptr = u ...

  2. JSON省市区

    省: [ { "ProID": 1, "name": "北京市", "ProSort": 1, "ProRem ...

  3. gcc 编译控制选项

    gcc 编译控制选项前面已经讲过, gcc 的基本用法是:$ gcc [选项] [文件名]gcc 有很多编译控制选项,使得 gcc 可以根据不同的参数进行不同的编译处理,可供 gcc调用的参数大约有 ...

  4. pycharm从本地离线添加模块

    豆瓣的源: http://pypi.douban.com/simple pip install matplotlib -i http://pypi.douban.com/simple --truste ...

  5. 禁止迅雷极速版被强制升级为迅雷x

    PS:迅雷极速版( ThunderSpeed1.0.34.360 )下载地址: https://pan.baidu.com/s/1wuBOpNbim5jBru03AfSAVg 按照下面的这个路径去找. ...

  6. spring 自定义schema 加载异常 White spaces are required between publicId and systemId.

    spring 项目启动报错 报错日志如下: Caused by: org.springframework.beans.factory.xml.XmlBeanDefinitionStoreExcepti ...

  7. Python学习日记(十七) os模块和sys模块

    os模块 1.os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 import os print(os.getcwd()) #C:\Users\Administrator\ ...

  8. tomcat运行一段时间出“org.apache.coyote.http11.Http11Processor.service Error parsing HTTP request header”

    试了好多种方法,貌似还是没有解决问题,不过也学到了点东西,记录下备忘吧. 异常详情: 1.首先看到最多的就是说在server.xml中的Connector中添加maxHttpHeaderSize=&q ...

  9. Linux路由:CentOS6的多种玩法

    将一台Linux主机作路由器使用,这本是件很容易的事情,利用Linux主机强大的网络功能,很轻松就实现了.这里在虚拟机环境下设定一台CentOS主机通过另一台CentOS主机路由接入Internet网 ...

  10. OPENWRT使用华为 E353/E3131的4G转WIFI路由器作为WAN接口上网(笔记)

    参考文档: http://www.yizu.org/archives/721/ 原来使用Hilink模式真的很简单 1.安装一些包: opkg install kmod-usb-net-rndis k ...