我有一个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;的新手斯卡拉。请让我知道如何解决此错误。
答案 0 :(得分:3)
代码看起来可能在其他区域关闭,但没有其余的我无法确定,所以至少这应该让你移动你需要在你的split
之后使用分号或放置分开的两个单独的陈述。
v1.split("\\|");(p(0).toLong, (p(1).toLong, v2.toLong))
如果没有分号,编译器会将其解释为:
v1.split("\\|").apply(p(0).toLong...)
其中apply
在这种情况下充当数组的索引器。