我有这个RDD:
Array[(String, String)] = Array((http://code.google.com/webtoolkit/doc/latest/DevGuideOptimizing.html,{(https://www.google.com/accounts/Login?continue=http%3A%2F%2Fcode.google.com%2Fwebtoolkit%2Fdoc%2Flatest%2FDevGuideOptimizing.html&followup=http%3A%2F%2Fcode.google.com%2Fwebtoolkit%2Fdoc%2Flatest%2FDevGuideOptimizing.html)}))
在值部分中,值的格式为:{}
或{(value1)}
或{(value1), (value2), (value3)}
。
我无法弄清楚如何解析这些值并列出它们,然后将其映射到键。
因为{}
不是数组或列表。
答案 0 :(得分:1)
如果您的数据类型为RDD[Array[(String, String)]]
,那么您可以
rdd.map(x => x.flatMap(y => y._1.replaceAll("[{()}]", "").split(",") ++ y._2.replaceAll("[{()}]", "").split(",")))
获取
RDD[Array[String]]
每个(String, String)
元组分开并收集在Array[String]
<强>更新强>
您的评论如下
数据类型是org.apache.spark.rdd.RDD [(String,String)]而不是RDD [Array [(String,String)]]
因此,对于这种情况,数组的内部地图可以忽略,你可以这样做
rdd.map(x => x._1.replaceAll("[{()}]", "").split(",") ++ x._2.replaceAll("[{()}]", "").split(","))
你应该得到与上面相同的结果。