我想分析一个文本文件
文本文件的格式如下:
<msg time='2015-07-30T16:37:48.408+09:00' org_id='oracle' comp_id='rdbms'
msg_id='opiexe:3056:2780954927' client_id='' type='NOTIFICATION'
group='admin_ddl' level='16' host_id='TEST_DB1'
host_addr='127.0.0.1' module='sqlplus@TEST_DB1 (TNS V1-V3)' pid='24436'>
<txt>ORA-1543 signalled during: create tablespace TS_MODULE_I datafile '/data001/orasvc01/NEWDB/ts_module_i_01.dbf' size 20m...
</txt>
</msg>
<msg time='2015-07-30T16:39:13.173+09:00' org_id='oracle' comp_id='rdbms'
client_id='' type='UNKNOWN' level='16'
host_id='TEST_DB1' host_addr='127.0.0.1' module=''
pid='23242'>
<txt>Errors in
file /logs001/orasvc01/diag/rdbms/newdb/NEWDB/trace/NEWDB_smon_23242.trc:
ORA-01116: error in opening database file 6
ORA-01110: data file 6:
'/data001/orasvc01/NEWDB/ts_module_d_01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
</txt>
</msg>
....
有时它包含7行,而其他事物则包含10行。
在这个情况下..
我想要像这样的输出
(column [0])(column [1])错误总和
2015-07-31 ora-1051 7
我该怎么办?
最佳答案
您的输入文件是xml。如果每行中都有整个xml作为字符串,则将使用直接映射减少。但是,您的输入格式不同。通常依赖于开始和结束标签来获取记录。
因此,您应该使用记录读取器,并为map reduce XmlInputFormat创建自己的格式。好消息是,它已经创建,您必须对其进行自定义。您可以搜索“xmlinputformat mahout”作为实际的类。但是,更简单的方法是查看使用上述格式的示例。您可以找到它here。一旦您的映射器重新记录了一条记录,并且您掌握了其中的内容,剩下的就直截了当,这取决于您要发送哪些细节以输出。快乐编码
关于hadoop - 在hadoop中这种情况下如何减少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31777789/