1.文本文件

(1)读取文本文件
JavaRDD<String> input =sc.textFile(dir)
(2)保存文本文件
result.saveAsTextFile(dir);
2.Json
 (1)gson
①Gson中需要创建JavaBean实体类来说明json的格式。
以下是javaBean的示例程序,Person,其中有两个字段,分别代表姓名和年龄。
public class Person {
private String name;
private int age;

public Person(String name, int age) {
this.name = name;
this.age = age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}
}
② 通过Person实例创建Json String
final Gson gson=new Gson();
Person jack =new Person("jack",21);
String json=gson.toJson(jack);
System.out.println(json);
输出:
{"name":"jack","age":21}
③  通过Json String 重建javaBean实例
try {
Person someone=gson.fromJson(json,Person.class);

System.out.println("name if someone is"+someone.getName());
System.out.println("age of someone is"+someone.getAge());

} catch (JsonSyntaxException e) {
e.printStackTrace();
}
输出:
name if someone is jack
age of someone is 21
(2)fastJson
fastJson中也要借助javaBean完成json String的创建和解析,我们依然采用上文Person类作为javaBean的定义。
①  通过Person实例创建json String
Person jack =new Person("jack",21);
String json = JSON.toJSONString(jack);
System.out.println(json);
②  解析json String
Person someone=JSON.parseObject(json,Person.class);
*注意,fastJson发序列化json String javaBean定义中必须加上默认构造函数,就像Person类的定义中需要对默认构造函数的定义,否则会报错:
public Person(){

}
3.逗号分隔值与制表符分隔值
(1)创建csv文件
//创建CSVWriter,文件路径为c://test.csv,分隔符为制表符
CSVWriter writer =new CSVWriter(new FileWriter("C://test.csv"),'\t');
//需要写入csv文件的一行的三个String
String [] line={"aaa","bbb","ccc"};
//写入这一行
writer.writeNext(line);
writer.close();
输出:
"aaa" "bbb" "ccc"
如果要连续输出几行的数据,可以这么做:
//创建CSVWriter,文件路径为c://test.csv,分隔符为制表符
CSVWriter writer =new CSVWriter(new FileWriter("C://test.csv"),'\t');
List<String[]> lines=new ArrayList<String[]>();
lines.add(new String []{"hhh","ggg","hhh"});
lines.add(new String[]{"xxx","yyy","zzz"});
writer.writeAll(lines);
writer.close();
输出:
"hhh" "ggg" "hhh"
"xxx" "yyy" "zzz"
(2)读取csv文件
现在我们用OpenCsv来读取我们刚才创建的csv文件,实现如下:
//读取csv文件,以行为单位,保存在lines中
JavaRDD<String> lines = sc.textFile("C://test.csv");
//定义如何将一行中的元素读取出来,以String[]的形式返回
class ParseLine implements Function<String,String[]>{

public String[] call(String s) throws Exception {
//新建CSVReader对象,分隔符定为'\t'制表符
CSVReader reader =new CSVReader(new StringReader(s),'\t');
//以数组的形式返回每一行中的元素
return reader.readNext();
}
}
//利用ParseLine,转化处理lines
JavaRDD<String[]> results=lines.map(
new ParseLine()
);
//遍历输出results中的内容
for(String s []: results.collect() ){
System.out.println("this is the elements of one line!");
for(String str:s)
System.out.println(str);
}
4.SequenceFile
(1)简介
    SequenceFile是由没有相对关系结构的键值对组成的常用hadoop格式。SequenceFile文件有同步标记,Spark可以用它来定位到文件的某个点,然后再与记录的边界对齐。这可以让Spark使用多个节点高效地并行读取SequenceFile文件。SequenceFile也是Hadoop MapReduce作业中常用的输入输出格式。
(2)以SequenceFile的格式保存PairRDD
//新建PairRDD<String,Integer>
JavaPairRDD<String,Integer> data =sc
.parallelizePairs(Arrays.asList(new Tuple2<String, Integer>("zhouyang", 1),
new Tuple2<String, Integer>("jack", 2),
new Tuple2<String, Integer>("bob", 3)));
//将PairRDD<String,Integer> 转换为hadoop io中对应的格式 PairRDD<Text,IntWritable>
JavaPairRDD<Text,IntWritable> result =data.mapToPair(
new PairFunction<Tuple2<String, Integer>, Text, IntWritable>() {
public Tuple2<Text, IntWritable> call(Tuple2<String, Integer> record) throws Exception {
return new Tuple2(new Text(record._1()),new IntWritable(record._2()));
}
}
);
//将result以SequenceFile保存在指定目录下
result.saveAsHadoopFile("C://hadoop.file",Text.class,IntWritable.class, SequenceFileOutputFormat.class);
(3)读取SequenceFile中的PairRDD,在(2)中创建的hadoop.file文件
JavaPairRDD<Text,IntWritable> input=sc.sequenceFile("c://hadoop.file",Text.class,IntWritable.class);
JavaPairRDD<String,Integer> results =input.mapToPair(
new PairFunction<Tuple2<Text, IntWritable>, String, Integer>() {
public Tuple2<String, Integer> call(Tuple2<Text, IntWritable> record) throws Exception {
return new Tuple2<String,Integer>(record._1().toString(),record._2().get());
}
}
);
for(Tuple2<String,Integer> tuple: results.collect())
System.out.println(tuple._1()+"->" +tuple._2());
(4)对象文件
    对象文件允许存储只包含值的RDD。和普通的SequenceFile不同,对于同样的对象,对象文件的输出和Hadoop输出不一样。
① 将PairRDD保存为对象文件
JavaPairRDD<String,Integer> data =sc
.parallelizePairs(Arrays.asList(new Tuple2<String, Integer>("zhouyang", 1),
new Tuple2<String, Integer>("jack", 2),
new Tuple2<String, Integer>("bob", 3)));
data.saveAsObjectFile("c://object.file");
②  读取对象文件的PairRDD,因为对象文件只存储包含值的RDD,所以读出时,应为JavaRDD<Tuple2<String,Integer>>格式
JavaRDD<Tuple2<String,Integer>> input=sc.objectFile("c://object.file");
for(Tuple2<String,Integer> tuple:input.collect()){
System.out.println(tuple._1()+" -> "+tuple._2());
}
5. protocol buffer                                                                                                                                                                                    






 

spark中数据的读取与保存的更多相关文章

  1. Numpy中数据的常用的保存与读取方法

    小书匠 深度学习  文章目录: 1.保存为二进制文件(.npy/.npz) numpy.save numpy.savez numpy.savez_compressed 2.保存到文本文件 numpy. ...

  2. Python Numpy中数据的常用的保存与读取方法

    在经常性读取大量的数值文件时(比如深度学习训练数据),可以考虑现将数据存储为Numpy格式,然后直接使用Numpy去读取,速度相比为转化前快很多. 下面就常用的保存数据到二进制文件和保存数据到文本文件 ...

  3. Spark SQL数据加载和保存实战

    一:前置知识详解: Spark SQL重要是操作DataFrame,DataFrame本身提供了save和load的操作, Load:可以创建DataFrame, Save:把DataFrame中的数 ...

  4. IOS webview中cookie的读取与保存-b

    Cookie 的读取 将它放在 webViewDidFinishLoad 开始后执行 NSArray *nCookies = [[NSHTTPCookieStorage sharedHTTPCooki ...

  5. spark中数据倾斜解决方案

    数据倾斜导致的致命后果: 1 数据倾斜直接会导致一种情况:OOM. 2 运行速度慢,特别慢,非常慢,极端的慢,不可接受的慢. 搞定数据倾斜需要: 1.搞定shuffle 2.搞定业务场景 3 搞定 c ...

  6. Numpy中数据的常用的保存与读取

    保存到文本文件numpy.savetxt()numpy.loadtxt() import numpy as np x= np.arange(0,10,0.1) np.savetxt('save_x', ...

  7. R语言学习笔记(数据的读取与保存)

    library(MASS)#载入package MASSdata(package="MASS") #查看MASS中的数据集data(SP500,package="MASS ...

  8. 【原】Learning Spark (Python版) 学习笔记(二)----键值对、数据读取与保存、共享特性

    本来应该上周更新的,结果碰上五一,懒癌发作,就推迟了 = =.以后还是要按时完成任务.废话不多说,第四章-第六章主要讲了三个内容:键值对.数据读取与保存与Spark的两个共享特性(累加器和广播变量). ...

  9. Ubuntu10.04中利用V4L2读取摄像头数据并保存成文件【转】

    转自:http://blog.chinaunix.net/uid-29339876-id-4042245.html 利用V4L2读取UVC摄像头数据并保存成视频文件,主要参考http://linuxt ...

随机推荐

  1. WiresShark 一站式学习

    按照国际惯例,从最基本的说起. 抓取报文: 下载和安装好Wireshark之后,启动Wireshark并且在接口列表中选择接口名,然后开始在此接口上抓包.例如,如果想要在无线网络上抓取流量,点击无线接 ...

  2. zf-关于查询机把index.jsp换成index_new.jsp页面之后把功能链接都改成新页面的简单方法

    一开始我都是找action 然后一个一个的改 把onmousedown="goURL('index.jsp')" 改成 onmousedown="goURL('index ...

  3. 利用XShell 上传和下载文件

    原文:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=28977986&id=4292781 借助XShell,使用li ...

  4. CodeForces 139C Literature Lesson(模拟)

    这个题,读懂了就是水,读不懂就没办法下手,论英语阅读的重要性...只有五种形式,第一种万能型aaaa,是另外3种的特殊情况,第二种克莱里林四行打油诗aabb形式,第三种是交替的abab形式,第四种是封 ...

  5. Kafka 在行动:7步实现从RDBMS到Hadoop的实时流传输

    原文:https://coyee.com/article/11095-kafka-in-action-7-steps-to-real-time-streaming-from-rdbms-to-hado ...

  6. Linux 高可用(HA)集群基本概念详解

    大纲一.高可用集群的定义二.高可用集群的衡量标准三.高可用集群的层次结构四.高可用集群的分类 五.高可用集群常用软件六.共享存储七.集群文件系统与集群LVM八.高可用集群的工作原理 推荐阅读: Cen ...

  7. Building Your First EDM

    1 文件--新建--项目 控制台应用程序,填写信息,确定: 2 在解决方案管理器中,选中AmyConsoleApp,添加新项, 选择ADO.NET 实体数据模型,添加: 3 在选择模型内容中选择“从数 ...

  8. Ubuntu安装PHP时候出错--xml2-config not found

    在Ubuntu下接着安装php时候,在configure后,又出现错误提示:error: xml2-config not found. Please check your libxml2 instal ...

  9. [iOS Animation]-CALayer 变换

    变换 很不幸,没人能告诉你母体是什么,你只能自己体会 -- 骇客帝国 在第四章“可视效果”中,我们研究了一些增强图层和它的内容显示效果的一些技术,在这一章中,我们将要研究可以用来对图层旋转,摆放或者扭 ...

  10. mysql root密码

    方法1: 用SET PASSWORD命令 首先登录MySQL. 格式:mysql> set password for 用户名@localhost = password('新密码'); 例子:my ...