Spark多文件输出(MultipleOutputFormat)
来源:互联网 发布:逆转三国上古神迹数据 编辑:程序博客网 时间:2024/05/16 09:59
在Hadoop中根据Key或者Value的不同将属于不同的类型记录写到不同的文件中。在里面用到了MultipleOutputFormat这个类。
不过社区已经有人建议开发出saveAsTextFileByKey函数来实现该功能(SPARK-3533,https://github.com/apache/spark/pull/4895),在Spark 1.4.0版本添加。
因为Spark内部写文件方式其实调用的都是Hadoop那一套东西,所以我们也可以通过Spark实现多文件输出。不过遗憾的是,Spark内部没有多文件输出的函数供大家直接调用,值得欣慰的是,我们自己实现这个功能也是很简单的。我们可以通过调用saveAsHadoopFile函数并自定义一个OutputFormat类即可,代码如下:
import org.apache.hadoop.io.NullWritableimport org.apache.spark._import org.apache.spark.SparkContext._import org.apache.hadoop.mapred.lib.MultipleTextOutputFormatclass RDDMultipleTextOutputFormat extends MultipleTextOutputFormat[Any, Any] { override def generateFileNameForKeyValue(key: Any, value: Any, name: String): String = key.asInstanceOf[String]}object Split { def main(args: Array[String]) { val conf = new SparkConf().setAppName("SplitTest") val sc = new SparkContext(conf) sc.parallelize(List(("w", "www"), ("b", "blog"), ("c", "com"), ("w", "bt"))) .map(value => (value._1, value._2 + "Test")) .partitionBy(new HashPartitioner(3)) .saveAsHadoopFile("/iteblog", classOf[String], classOf[String], classOf[RDDMultipleTextOutputFormat]) sc.stop() }}RDDMultipleTextOutputFormat类中的generateFileNameForKeyValue函数有三个参数,key和value就是我们RDD的Key和Value,而name参数是每个Reduce的编号。本例中没有使用该参数,而是直接将同一个Key的数据输出到同一个文件中。执行:
bin/spark-submit --master yarn-cluster --class Split ./iteblog-1.0-SNAPSHOT.jar然后我们可以看到在HDFS上输出的文件列表如下:
[blog@master ]$ bin/hadoop fs -ls /blogFound 4 items-rw-r--r-- 3 blog hadoop2 0 2015-03-09 11:26 /blog/_SUCCESS-rw-r--r-- 3 blog hadoop2 11 2015-03-09 11:26 /blog/b-rw-r--r-- 3 blog hadoop2 10 2015-03-09 11:26 /blog/c-rw-r--r-- 3 blog hadoop2 19 2015-03-09 11:26 /blog/w[blog@master ]$ bin/hadoop fs -cat /blog/wwbtTestwwwwTest从上面的输出可以看出key为w的记录全部输出到文件名为w的文件中去了。
不过社区已经有人建议开发出saveAsTextFileByKey函数来实现该功能(SPARK-3533,https://github.com/apache/spark/pull/4895),在Spark 1.4.0版本添加。
0 0
- Spark多文件输出(MultipleOutputFormat)
- MultipleOutputFormat多文件输出
- Hadoop多文件输出:MultipleOutputFormat和MultipleOutputs深究(一)
- Hadoop多文件输出:MultipleOutputFormat和MultipleOutputs深究(一)
- Hadoop多文件输出:MultipleOutputFormat和MultipleOutputs深究(二)
- Hadoop多文件输出:MultipleOutputFormat和MultipleOutputs深究(一)
- Hadoop多文件输出:MultipleOutputFormat和MultipleOutputs深究(二)
- Hadoop多文件输出:MultipleOutputFormat和MultipleOutputs深究
- Hadoop多文件输出:MultipleOutputFormat和MultipleOutputs深究(一)
- Hadoop多文件输出:MultipleOutputFormat和MultipleOutputs深究
- Hadoop多文件输出之MultipleOutputFormat和MultipleOutputs
- Hadoop多文件输出:MultipleOutputFormat和MultipleOutputs深究(一)
- Hadoop多文件输出:MultipleOutputFormat和MultipleOutputs深究(二)
- mapreduce多目录输出(MultipleOutputFormat和MultipleOutputs)
- spark多文件输出
- Spark多文件输出(MultipleTextOutputFormat)
- Spark多文件输出(MultipleTextOutputFormat)
- Spark 同步提交应用/多文件输出
- 巴蜀1322 第k小的数
- c++中的 template<class Type>
- android状态栏一体化(改变状态栏的背景颜色)
- webView的用法总结。
- c++作业6
- Spark多文件输出(MultipleOutputFormat)
- 关于Maven+SpringMvc4.2版本返回json配置
- 问题 H: 不开心的小明③
- HTTP响应
- 【IIS问题】——默认网站localhost无法打开,错误类型404
- 文章标题
- Linux-内核模块开发
- 《深入理解Linux 内核》 chap 1 绪论
- HOOJ1290 2050(递推)