如何在Scala中解析RDD
我有这个RDD:如何在Scala中解析RDD,scala,rdd,Scala,Rdd,我有这个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&
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)}
我不知道如何解析这些值并列出它们,然后将其映射到键
因为
{}
不是数组或列表。如果您有类型为RDD[Array[(String,String)]]
的数据,则可以执行以下操作
rdd.map(x => x.flatMap(y => y._1.replaceAll("[{()}]", "").split(",") ++ y._2.replaceAll("[{()}]", "").split(",")))
得到
RDD[Array[String]]
其中每个(String,String)
元组在数组[String]
已更新
你下面的评论说
数据类型是org.apache.spark.rdd.rdd[(String,String)],而不是rdd[Array[(String,String)]
在这种情况下,可以忽略数组的内部映射,您可以按如下操作
rdd.map(x => x._1.replaceAll("[{()}]", "").split(",") ++ x._2.replaceAll("[{()}]", "").split(","))
您应该得到与上面相同的结果。数据类型是
org.apache.spark.rdd.rdd[(字符串,字符串)]
而不是rdd[Array[(字符串,字符串)]]