我有一个包含文本数据的巨大文本文件。文件'每行包含12个字符的数据。我需要使用map reduce job从该文件中找到5个字符的子字符串。
输入文件。
abcdefghijkl
kahfdjshjsdh
sdfkjsdjkjks
要搜索的值
cdefg
' cdefg'可以出现在文件中的任何位置。它可以分为两行。所以我不知道如何创建当前行的最后两个字符和下一行的下一个3字符的映射。
答案 0 :(得分:0)
我有一个包含12个字符的行的文件,我想找到5个 该文件中字符串的字符。在Mapper中我得到了12 线的字符,可以创建两个5字符的地图,左边2 角色,并希望从下一行得到下一个3个字符,并希望 创建它的地图。所以在reducer中我可以将这些地图与我的地图进行比较 字符串。
您可以将所有行连接在一起,然后可以使用5个字符将结果拆分为Splitting a string at every n-th character:
abcdefghijklkahfdjshjsdhsdfkjsdjkjks
[abcde, fghij, klkah, fdjsh, jsdhs, dfkjs, djkjk, s]
您可以从这段代码中激发解决方案:
File file = new File("myFile.txt");
try {
Scanner scanner = new Scanner(file);
String result = "";
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
result += line;
}
System.out.println(result);
//here you can use this array
String spl[] = result.split("(?<=\\G.....)");
System.out.println(Arrays.toString(spl));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
<强>输出强>
abcdefghijklkahfdjshjsdhsdfkjsdjkjks
[abcde, fghij, klkah, fdjsh, jsdhs, dfkjs, djkjk, s]
修改强>
我想创建这样的地图abcdefghijklkahfdjshjsdhsdfkjsdjkjks [abcde,bcdef,cdefg,defgh ...]
您可以像这样解决这个问题:
String str = "abcdefghijklkahfdjshjsdhsdfkjsdjkjks";
List<String> list = new ArrayList<>();
for (int i = 0; i < str.length()-4; i++) {
String s = "";
for (int j = i; j < i+5; j++) {
s+=result.charAt(j);
}
list.add(s);
}
<强>输出强>
[abcde, bcdef, cdefg, defgh, efghi, fghij, ghijk, ...., djkjk, jkjks]