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 ...
随机推荐
- 用12个例子全面示范Angular的模板语法
template分支,用12个例子全面示范Angular的模板语法 // 使用方法 git clone https://git.oschina.net/mumu-osc/learn-component ...
- 纯css实现隐藏滚动条仍可以滚动
移动端弹出层加了滚动条之后,滚动条一直在,有些不美观,overflow:hidden;虽然可以隐藏滚动条,但是不能滚动.需要实现隐藏滚动条但是仍可以滚动,js实现太麻烦,直接将滚动条隐藏会更好一些. ...
- getComputedStyle获取css属性与IE下的currentStyle获取到的值不同
<!doctype html><html lang="en"> <head> <meta charset="UTF-8&quo ...
- 表单验证 靠name获取
表单 靠name获取 <form class="add-form" name="form" action="#" method=&qu ...
- windosw启动redis
1.cmd控制台 cd C:\Program Files\Redis 2.redis-server.exe redis.windows.conf 3. ok!!
- event chrome firefox 获取点击对象的 id 类
<!doctype html><html lang="en"><head> <meta charset="UTF-8" ...
- 常用的SQLalchemy 字段类型
https://blog.csdn.net/weixin_41896508/article/details/80772238 常用的SQLAlchemy字段类型 类型名 python中类型 说明 In ...
- Spring Data HelloWorld(三)
在 Spring Data 环境搭建(二) 的基础之上 我们改动 http://www.cnblogs.com/fzng/p/7253068.html 定义个一个接口 继承Repository类 ...
- facebook 相似性搜索库 faiss
faiss 个人理解: https://github.com/facebookresearch/faiss 上把代码clone下来,make编译 我们将CNN中经过若干个卷积/激励/池化层后得到的激活 ...
- 5.MongoDB CRUD Operations-官方文档摘录
总结 1. CRUD:create, read, update, and delete DOCUMENT 2.在3.2版本的插入方式 db.collection.insertOne() db.coll ...