map continue流的reduce作业

ev7lccsx  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(427)

我有一个巨大的文本文件,其中包含文本数据。文件的每行包含12个字符的数据。我需要找到一个5个字符的子字符串从该文件使用Map减少工作。
输入文件。

abcdefghijkl
kahfdjshjsdh
sdfkjsdjkjks

要搜索的值

cdefg

“cdefg”可以出现在文件中的任何位置。它可以分为两行。所以我不知道如何创建当前行的最后两个字符和下一行的下三个字符的Map。

vcudknz3

vcudknz31#

我有一个包含12个字符行的文件,我想从该文件中找到5个字符的字符串。在Map我得到12个字符的线,可以创建两个Map的5个字符和左2个字符,想从下一行得到下一个3字符,想创建Map的。所以在reducer中,我可以将这些Map与我的字符串进行比较。
您可以将所有行连接在一起,然后可以使用5个字符分割结果检查此操作在每n个字符处分割一个字符串:

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]

编辑
我想创建这样的Map
你可以这样解决这个问题:

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]

相关问题