c++读取文本文件并排序输出_Spark-数据读取与保存(Scala版)

文件格式

Spark对文件的读取和保存方式都很简单,会根据文件的扩展名选择对应的处理方式

Spark支持的一些常见格式

e10a2a9bd8f69a874b3fa337578a1302.png

文本文件

当我们将一个文本文件读取为RDD时,输入的每一行都会成为RDD的一个元素,也可以将多个完整的文本文件一次性读取为一个pair RDD,其中键是文件名,值是文件内容。

读取文本文件

只需要使用文件路径作为参数调用SparkContext中的textFile()函数,就可以读取一个文本文件

读取一个文本文件

5e3625c92f7e791bd2f6a579b967262f.png

如果文件足够小,可以使用SparkContext,wholeTextFiles()方法,该方法会返回一个pair RDD,其中键是输入文件的文件名

8d27a50f21e4ea6e3f5efb0ba4c6b594.png

JSON

JSON是一种使用较广的半结构化数据格式,读取JSON数据的最简单的方法可以在所有支持的编程语言中使用。然后使用JSON解释器来对RDD中的值进行映射操作,Scala中也可以使用一个自定义Hadoop格式来操作JSON数据。

在scala中读取JSON

6a506e798c134360b5dbeb97e19f22f1.png

在scala中保存为JSON

d81eece9ef3776789c0e3f3d2c1e7098.png

逗号分隔值(CSV)与制表符分割值(TSV)

读取CSV

读取CSV/TSV数据和读取JSON数据相似,都需要先把文件当做普通文本文件来读取数据,再对数据进行处理。由于格式标准的缺失,同一个库的不同版本有时也会用不同的方式处理输入数据。

如果你的CSV的所有数据字段均没有包含换行符,你也可以使用textFile()读取并解析数据

188e5bdcdc247de4bb00d212f3274966.png

如果在字段中嵌有换行符,就需要完整读入每个文件,然后解析。

6aef144bb2311eb512ecda04aad21ad7.png

保存CSV

写出CSV/TSV数据很简单,可以通过重用输出编码器来加速

1bddd3fc7fe84bfbfe75a26450ee6b9b.png

上述的例子中只能在我们知道所有要输出的字段时使用,然而如果一些字段名是在运行时由用户输入决定的,就要使用别的方法了,最简单的方法是遍历所有的数据,提取不同的键,然后分别输出。

SequenceFile

SequenceFile是由没有相对关系结构的键值对文件组成常用的Hadoop格式,SequenceFile文件有同步标记,Spark可以用它来定位到文件中的某个点,然后再与记录的边界对其。这可以让Spark使用多个节点高效的并行读取SequenceFile文件。

读取SequenceFile

Spark有专门用来读取SequenceFile的接口。SparkContext中,可以调用sequenceFile(path,keyClass,valueClass,minPartitions)

7ae9588ca7aab01305f26b8deb8adc4c.png

保存SequenceFile

3532a5f6ed21a1dc55f9c86a36e21885.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值