运用hadoop计算TF-IDF续-支持中文读取-支持文件输出控制
2013-01-31 17:23
495 查看
jackydai987在文章《运用hadoop计算TF-IDF》(/article/9073347.html)提到了TF-IDF的计算,但是留下几个问题:
1、 输出的文件控制
2、 对中文字符的处理
为此本文做如下改进:
请参见《Hadoop的MapReduce中多文件输出》http://blog.csdn.net/jackydai987/archive/2011/03/12/6244725.aspx)
文中提出了三个类:
My_LineRead.java(修改使用)
MyMultipleOutputFormat.java(保留使用)
以及嵌入到主程序的
MyMultiple.java(修改使用)
1. public static class MyMultiple extends MyMultipleOutputFormat{
2.
3. @Override
4. protected String generateFileNameForKeyValue(WritableComparable key,
5. Writable value, Configuration conf) {
6. // TODO Auto-generated method stub
7. return "other.txt";
8. }
9.
10. }
具体修改如下:
1、修改MyMultiple.java,保证产生的输出文件名为源文件名
publicstatic class MyMultiple extends MyMultipleOutputFormat{
@Override
protectedString generateFileNameForKeyValue(WritableComparable key,
Writablevalue, Configuration conf) {
//TODO Auto-generated method stub
String[]c = value.toString().split(" ");
//以文件名为输出的文件名
returnc[0] + ".txt";
}
}
2、修改My_LineRead以支持中文读入输出
其他原理参考:http://blog.csdn.net/guoery/article/details/8557094
具体如下:
//private static final String utf8 ="UTF-8";
改为:
private
static final String utf8 ="GBK";
@Override
public
void write(K key, V value) throwsIOException,
InterruptedException {
if (!(key==null && key
instanceofNullWritable)){
//如果key不为空者输出key
if((Object)keyinstanceof Text){
//下面的注释掉
/*
Text to = (Text)key;
out.write(to.getBytes(),0, to.getLength());
}
else
{
*/
out.write(key.toString().getBytes(utf8));
}
out.write(keyValueSeparator);
}
if(!(value ==null && value
instanceofNullWritable)){
//如果value不为空则输出value
if((Object)valueinstanceof Text){
//下面的注释掉
/* Textto = (Text) value;
out.write(to.getBytes(),0, to.getLength());
}
else
{
*/
out.write(value.toString().getBytes(utf8));
}
out.write(newline);
}
}
3、在主程序中修改:
//设置多文件输出
job1.setOutputFormatClass(MyMultiple.class);
Job2.setOutputFormatClass(MyMultiple.class);
输出结果如下图:
1、 输出的文件控制
2、 对中文字符的处理
为此本文做如下改进:
请参见《Hadoop的MapReduce中多文件输出》http://blog.csdn.net/jackydai987/archive/2011/03/12/6244725.aspx)
文中提出了三个类:
My_LineRead.java(修改使用)
MyMultipleOutputFormat.java(保留使用)
以及嵌入到主程序的
MyMultiple.java(修改使用)
1. public static class MyMultiple extends MyMultipleOutputFormat{
2.
3. @Override
4. protected String generateFileNameForKeyValue(WritableComparable key,
5. Writable value, Configuration conf) {
6. // TODO Auto-generated method stub
7. return "other.txt";
8. }
9.
10. }
具体修改如下:
1、修改MyMultiple.java,保证产生的输出文件名为源文件名
publicstatic class MyMultiple extends MyMultipleOutputFormat{
@Override
protectedString generateFileNameForKeyValue(WritableComparable key,
Writablevalue, Configuration conf) {
//TODO Auto-generated method stub
String[]c = value.toString().split(" ");
//以文件名为输出的文件名
returnc[0] + ".txt";
}
}
2、修改My_LineRead以支持中文读入输出
其他原理参考:http://blog.csdn.net/guoery/article/details/8557094
具体如下:
//private static final String utf8 ="UTF-8";
改为:
private
static final String utf8 ="GBK";
@Override
public
void write(K key, V value) throwsIOException,
InterruptedException {
if (!(key==null && key
instanceofNullWritable)){
//如果key不为空者输出key
if((Object)keyinstanceof Text){
//下面的注释掉
/*
Text to = (Text)key;
out.write(to.getBytes(),0, to.getLength());
}
else
{
*/
out.write(key.toString().getBytes(utf8));
}
out.write(keyValueSeparator);
}
if(!(value ==null && value
instanceofNullWritable)){
//如果value不为空则输出value
if((Object)valueinstanceof Text){
//下面的注释掉
/* Textto = (Text) value;
out.write(to.getBytes(),0, to.getLength());
}
else
{
*/
out.write(value.toString().getBytes(utf8));
}
out.write(newline);
}
}
3、在主程序中修改:
//设置多文件输出
job1.setOutputFormatClass(MyMultiple.class);
Job2.setOutputFormatClass(MyMultiple.class);
输出结果如下图:
相关文章推荐
- 运用hadoop计算TF-IDF
- 开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动。从(0,0)点开始移动,从输入字符串里面读取一些坐标,并将最终输入结果输出到输出文件里面。
- Unity3D研究院之IOS Android支持中文与本地文件的读取写入(二十七)
- 控制Hadoop的reducer函数输出文件命名
- hadoop读取hdfs文件中的中文乱码解决办法
- C++调用GDAL库读取并输出tif文件,并计算斑块面积输出景观指数:CSD
- hadoop生态系统学习之路(四)MR支持的输入文件格式以及输出文件格式
- Unity3D IOS Android支持中文与本地文件的读取写入
- python进行中文文本聚类实例(TFIDF计算、词袋构建)
- flash动态读取xml输出的中文字会增加文件大小
- Hadoop控制输出文件命名
- 使Qt5.6支持读取中文路径文件
- 运用mapreduce计算tf-idf
- Unity3D研究院之IOS Android支持中文与本地文件的读取写入(二十七)
- SpringSecurity3 读取中文消息资源(properties)文件,输出乱码的问题
- 文件文档文档的词频-反向文档频率(TF-IDF)计算
- hadoop文件输出控制,多路径输出到不同文件
- 从文件中读取数据、控制输出格式
- hadoop输出控制,输出到指定文件中
- Unity3D研究院之IOS Android支持中文与本地文件的读取写入