大漠孤烟直,长河落日圆。
唐·王维·使至塞上
spark的多目录输入与输出
完整代码
import org.apache.hadoop.mapred.lib.MultipleTextOutputFormat |
多目录输入
// read all files(files in different directorys) |
目录文件情况:
input |
多目录输出
输出结果
output |
解析
在MultipleTextOutputFormat类中generateActualKey函数和generateActualValue函数控制程序是否在文件输出key和value,想要排除谁重写哪个函数即可
generateFileNameForKeyValue函数有三个参数key(即字面的意思,数据的key)、value(即字面意思,数据的value)、name(每个reduce的编号,即正常输出时的文件名part-000),返回值就是输出文件名
在你所提供的目录下,通过<key+”/“+name>(name可加可不加)的形式实现多级目录的输出,可以添加更多层级的目录<xx+”/“+xxx+”/“+key+”/“+name>(name可加可不加),如果没有使用”/“就会在提供的目录下按照文件名生成文件,建议追加name否则容易造成多个reduce写在一个文件并且文件内容只会有一个reduce输出内容
generateActualKey函数中的 NullWritable.get(),NullWritable是Writable的一个特殊类,实现方法为空实现,不从数据流中读数据,也不写入数据,只充当占位符