方法适用的参数太多:(i:Int)类Array中的字符串

时间:2015-12-28 00:54:18

标签: scala apache-spark

我有一个RDD(r2Join1),它包含以下数据

docker run -it -p 8888:8888 \
-e CONFIG_HOST="$(echo $DOCKER_HOST | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}')" \
-e HTTP_PORT=8888 \
-e CONFIG_LOCATION="file:///Users/<some path>/config/" \
-e REGISTER_WITH_DISCOVERY="false" \
-e SPRING_PROFILES_ACTIVE=native \
-v "/Users/<some path>/config/:/Users/<some path>/config/" \
xxx

我想将其转换为以下内容

(100,(102|1001,201))
(100,(102|1001,200))
(100,(103|1002,201))
(100,(103|1002,200))
(150,(151|1003,204))

即,我想将(k,(v1 | v2,v3))转换为(v1,(v2,v3))。

我做了以下事情:

(102, (1001, 201))
(102, (1001, 200))
(103, (1002, 201))
(103, (1002, 200))
(151, (1003, 204))

我收到以下错误

val m2 = r2Join1.map({case (k, (v1, v2)) => val p: Array[String] = v1.split("\\|") (p(0).toLong, (p(1).toLong, v2.toLong))})

我是Spark&amp;的新手斯卡拉。请让我知道如何解决此错误。

1 个答案:

答案 0 :(得分:3)

代码看起来可能在其他区域关闭,但没有其余的我无法确定,所以至少这应该让你移动你需要在你的split之后使用分号或放置分开的两个单独的陈述。

v1.split("\\|");(p(0).toLong, (p(1).toLong, v2.toLong))

如果没有分号,编译器会将其解释为:

v1.split("\\|").apply(p(0).toLong...)

其中apply在这种情况下充当数组的索引器。