Spark 实现自定义对象sequenceFile方式存储,读写示例(scala编写)
package com.fuge.bigdata.datahub.analysis
import java.io.{DataInput, DataOutput}
import com.fuge.bigdata.tools.common.utils.SparkUtils
import org.apache.hadoop.io.{NullWritable, WritableComparable}
import org.apache.spark.SparkContext
/**
* Created by chen xiang on 18-6-13.
* 一个使用SequenceFile进行存储读取的使用示例
*/
object SequenceFileUsage {
def main(args: Array[String]): Unit = {
require(args.length == 1)
// 构建SparkContext对象,封装过,单独运行,自行修改后定义
val sc = new SparkContext(SparkUtils.getSparkConf("SequenceFileUsage"))
// 获取路径参数
val path = args(0).trim
// 定义测试数据
val studentList = List(Student("01", "abc"), Student("02", "baby"), Student("03", "xiang"))
// 序列化测试数据到RDD,并写入到bos
sc.parallelize(studentList)
.repartition(1)
// 以NullWritable 为key,构建kv结构.SequenceFile需要kv结构才能存储,NullWritable不占存储
.map(NullWritable.get() -> _)
// 压缩参数可选用
.saveAsSequenceFile(s"$path", Option(classOf[GzipCodec]))
// 读取刚才写入的数据
val studentRdd = sc.sequenceFile(s"$path/part-*", classOf[NullWritable], classOf[Student])
.map {
// 读取数据,并且重新赋值对象
case (_, y) => Student(y.id, y.name)
}
.persist()
studentRdd
.foreach(x => println("count: " + x.id + "\t" + x.name))
}
}
case class Student(var id: String, var name: String) extends WritableComparable[Student] {
/**
* 重写无参构造函数,用于反序列化时的反射操作
*/
def this() {
this("", "")
}
/**
* 继承Comparable接口需要实现的方法,用于比较两个对象的大小
*/
override def compareTo(o: Student): Int = {
var cmp = id compareTo o.id
if (cmp == 0) {
cmp = name compareTo o.name
}
cmp
}
/**
* 继承Writable接口需要实现的方法-反序列化读取结果,并且赋值到对象字段
* 注意要和write的顺序一致
*/
override def readFields(in: DataInput): Unit = {
name = in.readUTF()
id = in.readUTF()
println("count: " + "\t id = " + id + "\t name = " + name)
}
/**
* 继承Writable接口需要实现的方法-序列化写操作,将对象字段值写入序列化
* 注意要和readFields的顺序一致
*/
override def write(out: DataOutput): Unit = {
out.writeUTF(id)
out.writeUTF(name)
}
}
Spark 实现自定义对象sequenceFile方式存储,读写示例(scala编写)的更多相关文章
- JS 创建自定义对象的方式方法
一.概述 还记得刚开始做项目的时候,看到别人封装的js工具类百思不得其解,看来看去看不懂,深挖一下,其实就是自己没有耐下心去看,但是遇到问题不解决,总会遇到的,今天还是遇到了,就去找了找帖子,重新思考 ...
- javascrip自定义对象的方式
对象初始化方式(也叫json对象创建方式) <script type="text/javascript"> var User = { name:"paul&q ...
- Java基础知识强化之集合框架笔记40:Set集合之HashSet存储自定义对象并遍历
1. HashSet存储自定义对象并遍历 2. 代码示例: (1)Student类,如下: package cn.itcast_02; /** * @author Administrator * */ ...
- Java基础知识强化之集合框架笔记24:ArrayList存储自定义对象并遍历
1. ArrayList存储自定义对象并遍历 2. 代码示例: Student.java,如下: package cn.itcast_01; public class Student { privat ...
- iOS开发——UI进阶篇(十一)应用沙盒,归档,解档,偏好设置,plist存储,NSData,自定义对象归档解档
1.iOS应用数据存储的常用方式XML属性列表(plist)归档Preference(偏好设置)NSKeyedArchiver归档(NSCoding)SQLite3 Core Data 2.应用沙盒每 ...
- 在配置文件(.settings、.config)中存储自定义对象
原文:在配置文件(.settings..config)中存储自定义对象 引言 我前面曾写过一篇<使用配置文件(.settings..config)存储应用程序配置>,我在其中指出“sett ...
- NSUserDefaults 简介,使用 NSUserDefaults 存储自定义对象
摘要: NSUserDefaults适合存储轻量级的本地数据,一些简单的数据(NSString类型的)例如密码,网址等,NSUserDefaults肯定是首选,但是如果我们自定义了一个对象,对象保存的 ...
- java 16 -11 ArrayList存储自定义对象并增强for遍历
需求:ArrayList存储自定义对象并遍历.要求加入泛型,并用增强for遍历. A:迭代器 B:普通for C:增强for LinkedList,Vector,Colleciton,List ...
- ios存储 plist 偏好设置 自定义对象存储
1,plist Plist注意:不能存储自定义对象 Plist:数组和字典, 如何判断一个对象能不能使用Plist,就看下有没有writeToFile 获取应用的文件夹(应用沙盒) NSString ...
随机推荐
- hdu 4055(经典问题)
总是不能正确的将一个大问题变成子问题,而且又找不到状态转移方程. 直接导致这题想了5个小时最后还是无果... 谨记! Number String Time Limit: 10000/5000 MS ( ...
- 一起学 Java集合框架、数据结构、泛型
一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...
- cdr X6 64位32位缩略图补丁包
cdr X6 64位32位缩略图补丁包下载 安装了X6没有缩略图的话,点击下面链接下载安装插件即可 点击下载
- 6号css学习小记
一.overfloat属性:(四个值) visible :默认值.内容不会被修剪,会呈现在元素匡之外. hidden:内容会被修剪,并且其余内容是不可见的. scroll :内容会被修剪,但是浏览器会 ...
- 安装 oracle 11g 发行版 出现错误:由于以下错误,Enterprise Manager配置失败,启动Database Control时出错
解决方案如下进入dos(1)查看dbconsole状态:emctl status dbconsole 显示:Environment variable ORACLE_SID not defined. P ...
- 7.javascript如何调试代码
http://www.cnblogs.com/youring2/archive/2012/08/08/2624093.html
- docker在团队中的实践 How To Install Docker In CentOS
" 预发布机器(centos-6.5),给每个同学都开通了ssh这个机器是大家一起共用的,稍后导些数据下来.后续 项目上线,产品测试,都是在这上面进行. 目前在一个物理机 " 3 ...
- MFC DLL获取当前路径
.首先定义此获取模块的静态方法 #if _MSC_VER >= 1300 // for VC 7.0 // from ATL 7.0 sources #ifndef _delayimp_h ex ...
- 替换DOM元素 parent.replaceChild(new, old)
p.replaceChild(nodeNext, p.children[j]); p.replaceChild(nodePrev, p.children[j + 1]);
- form表单学习
1.http://www.cnblogs.com/fish-li/archive/2011/07/17/2108884.html 2.http://www.cnblogs.com/polk6/arch ...