gpt4 book ai didi

java - Spark JavaRDD - 函数不返回值

转载 作者:行者123 更新时间:2023-12-01 09:44:36 25 4
gpt4 key购买 nike

我有一个 IP 列表作为字符串列表存储在 JavaRDD 中 logLine:[[54.186.7.47]、[178.154.189.203]、[10.55.1.29]、[115.93.74.252]]

我运行下面的代码部分来创建带有整数列表的新 JavaRDD - 由每个 IP 的 4 个八位字节之和组成(即 95 表示 10.55.1.29)。

但是当我运行 ipSplit.collect() 时,我收到 [[0], [0], [0], [0]]。我的代码有什么问题吗? :)

JavaRDD<List<Integer>> ipSplit = logLine.map(new Function<List<String>, List<Integer>>() {
public List<Integer> call(List<String> s) {
List<Integer> ipNumbers = new ArrayList<Integer>();
for (String ip : s) {
List<String> temp = Arrays.asList(ip.split("."));
int summary = 0;
for (String octet : temp) {
//System.out.println("octet: " + octet);
summary = summary + Integer.parseInt(octet);
}
ipNumbers.add(summary);
}
return ipNumbers;
}
});

最佳答案

所以,你的问题出在这一行:

List<String> temp = Arrays.asList(ip.split("."));

split()方法可以将正则表达式作为输入,当使用点( . )作为输入时,该方法将其视为正则表达式而不是实际字符。

您需要做的是转义点字符,以告诉该方法将点视为字符。

替换这一行:

List<String> temp = Arrays.asList(ip.split("."));

用这一行:

List<String> temp = Arrays.asList(ip.split("\\."));

地点:

  • 第一 \是转义以下第二个字符 \因为斜杠也是正则表达式字符

  • 第二个 \意思是转义以下字符,即 .

  • .是要转义的字符

关于java - Spark JavaRDD - 函数不返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38168435/

25 4 0