Spark 2.x读取&存储数据实战

本文介绍了Spark 2.x中如何使用DataFrameReader和DataFrameWriter进行数据读取和写入,涵盖了json、parquet、text、csv和jdbc等多种格式。Spark能够自动推断json文件的schema,parquet提供高效的列式存储,text和csv则适合特定格式的数据处理,而jdbc用于与关系型数据库交互。
摘要由CSDN通过智能技术生成

前言

Spark是基于Hadoop生态圈二次构建的,它支持多种输入输出源,spark可以通过Hadoop MapReduce 所使用的InputFormat 和 OutPutFormat 接口访问数据,而大部分常见的文件格式与存储系统(S3, HDFS, Cassandra, HBase 等)都支持这种接口。

数据读取与存储在spark 2.x之前是通过sqlContext/hiveContext进行读取和写入的,在spark 2.0以后可以使用SparkSession成员变量read来获取相应的DataFrameReader进行读取外界数据源,以及dataset的write成员变量来获取DataFrameWriter,进行数据的写入操作。

概述

DataFrameReader读取数据,数据源可以选择json/parquet/text/orc/csv等,一般情况下都有两种方法去读取:

// 指定format  shcema  option和路径
sparkSession.read.
format("json/parquet/text/orc/csv").
schema(xx).
option("", xx).
load(path*)

// 利用不同的类型的特定方法
sparkSession.read.
json(path*)/csv(path*)/parquet(path*)/
orc(path*)/text(path*)/textFile(path*)

// jdbc单独

DataFrameWriter用来写入数据,写入方式可以选择json/parquet/text/orc/csv等,一般情况下都有两种方法去写入:

// 获取方式
dataset/dataframe.write
def write: DataFrameWriter[T]

// 写入文件
// Mode: SaveMode.Overwrite/SaveMode.Append/SaveMode.Ignore/SaveMode.ErrorIfExists
// Modestring: overwrite/append/ignore/error<errorifexists>
ds.write.
format("json/parquet/text/orc/csv").
mode("").
option(xx, xx).
save(path)

ds.write.
mode("").
json(path)/csv(path)/parquet(path)/
orc(path)/text(path)/textFile(path)

// 写入表中:saveAsTable会根据column名字查找正确的列位置,
// insertInto会忽略位置,按照dataFrame的定义顺序插入
def insertInto(tableName: String)
def saveAsTable(tableName: String)


// jdbc单独

json

读取json文件,DataFrameReader会自动推断schema,先遍历一遍数据集,抽取出schema,然后进行每行解析所以对于各行如果存在模式不统一的情况,有的缺少某个字段,spark也会进行处理,相应的column设置为None, 读取后得到DataFrame,每一行schema为json的推断字段&类型,array里面嵌套的jsonObj会被解析为struct。

// 数据
{
   "name":"Michael"}
{
   "name":"Andy",
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值