java - 如何以 MapReduce 格式在一行中打印一些标记?
问题描述
我正在写一个地图功能。我有一个文本文件:
364.2 366.6 365.2 0 0 1 10421
364.2 366.6 365.2 0 0 1 10422
我想显示第 1,3 列。这是我的代码,但它显示了所有行。
public static class SumMap extends Mapper<Object, Text, Text, IntWritable> {
private final static IntWritable one = new IntWritable(1);
private Text str = new Text();
@Override
protected void map(Object key, Text value, Context context) throws IOException, InterruptedException {
StringTokenizer lineIter = new StringTokenizer(value.toString(), "\\r?\\n");
while (lineIter.hasMoreTokens()) {
StringTokenizer tokenIter = new StringTokenizer(lineIter.nextToken(), "\\s+");
while (tokenIter.hasMoreTokens()) {
String v1 = tokenIter.nextToken();
String v2 = tokenIter.nextToken();
String c1 = tokenIter.nextToken();
String c2 = tokenIter.nextToken();
str.set(v1+c1);
context.write(str, one);
}
}
}
}
在此代码中,第一个应按行拆分("\\r?\\n")
,然后对于每一行,按数字或字符串或标记拆分("\\s+")
。最后,打印v1+c1
。如何更改我的代码?
解决方案
如果使用TextInputFormat,map的key是行号,value是行内容。你不需要分割线。只需拆分每一行:
@Override
protected void map(Object key, Text value, Context context) throws IOException, InterruptedException {
String[] vals = value.toString().split("\\s+");
if (vals.length == 7) {
context.write(new Text(vals[0] + vals[2]), one);
}
}
推荐阅读
- java - 带前缀的 Java 递归 ABC 生成器
- python - 从瓶子模板中引用图像的方法是什么?
- c++ - 水平显示列表
- user-registration - 添加到 um 注册表单的字段未显示在数据库中
- objective-c - 理解十六进制逻辑
- android - WebView,链接到 Google 相册但 ERR_UNKNOWN_URL_SCHEME
- python - 运行 python pptx 代码后图像损坏
- phpmyadmin - phpmyadmin 左侧面板上不显示一张表
- android - 使用可缩放的选定卡片水平刷卡
- java - 在 geeksforgeeks 上解决矩阵问题中的路径有什么问题?