如何将Hadoop的结果以CSV格式输出?

11

我需要将我的Hadoop结果以.csv格式输出。 我该怎么做? 我的代码:https://github.com/studhadoop/xml/blob/master/XmlParser11.java

我是否应该在我的代码中简单地包含csvoutputFormat。 我正在使用mapreduce API。

myjob.sh

bin/hadoop jar /var/root/ALA/ala_jar/clsperformance.jar ala.clsperf.ClsPerf /user/root/ala_xmlrpt/Amrita\ Vidyalayam\,\ Karwar_Class\ 1\ B_ENG.xml  /user/root/ala_xmlrpt-outputshell4

bin/hadoop fs -get /user/root/ala_xmlrpt-outputshell4/part-r-00000 /Users/jobsubmit


cat /Users/jobsubmit/part-r-00000 /Users/jobsubmit/output.csv

解决方案

是的,我在 cat 命令中漏掉了 > 符号。

cat /Users/jobsubmit/part-r-00000> /Users/jobsubmit/output.csv
1个回答

15
你可以使用TextOutputFormat。默认的键/值分隔符是制表符。你可以通过在驱动程序中设置属性“mapred.textoutputformat.separatorText”来更改分隔符。
conf.set("mapred.textoutputformat.separatorText", ",");

4
注意属性名应为"mapred.textoutputformat.separator"而不是"mapred.textoutputformat.separatorText"。 - Rags
实际上,我的意图是将Hadoop的结果输出为.csv文件,因为我需要可视化这些数据。在RapidMiner中,我们可以将数据导入为csv格式。因此,我正在尝试将我的输出转换为csv格式。我认为它应该是一个.csv文件,但我不确定。有什么想法吗? - USB
1
我认为不可能从MapReduce作业中创建一个扩展名为".csv"的文件。您需要有一个工作流脚本,它将:1)提交MapReduce作业;2)使用shell命令从HDFS提取输出;3)将它们合并在一起,重命名为“.csv”并放置在可视化工具可以访问最终文件的目录中。 - Rags
1
第三个命令cat /Users/jobsubmit/part-r-00000 > /Users/jobsubmit/output.csv缺少重定向操作符。注意命令中的“>”,它会将标准输出写入文件。此外,使用“part-r-*”,以便如果有多个文件,所有文件都被考虑在内。 - Rags
@Rags 是的,你可以定义你的输出扩展名!在你的 reducer 中,使用 MultipleOutputs。这个 write 方法就是你需要的。(我正在生产环境中使用它!):http://hadoop.apache.org/docs/stable/api/org/apache/hadoop/mapreduce/lib/output/MultipleOutputs.html#write%28java.lang.String,%20K,%20V,%20java.lang.String%29 - gyorgyabraham
显示剩余21条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接