我是Scala的新手,并尝试了多种方法将RDD [Array [(String,String)]]类型转换为RDD [(String,String)]。
我想实现的是从Json中选择两个元素(文本和类别)。对于文本中的每个单词,我只想创建以下形式的键/值对:(word1,类别),(word2,类别),....
我的示例如下:
import org.json4s._
import org.json4s.jackson.JsonMethods._
// Example Json-line: {"reviewText": "This was a gift!", "category": "Apps"}"
val rdd = sc.textFile(PathToJSONFile)
rdd.map{
row =>
val json_row = parse(row)
val myCategory = compact(json_row \ "category").toString
val myText = compact(json_row \ "reviewText").toString.toLowerCase.split("[#&$!]").map(_.trim).filter(_.length > 1)
myText.map{word => (word, myCategory)}
}
输出为org.apache.spark.rdd.RDD [Array [(String,String)]],看起来像这样:Array(Array((this,“ Apps”),(was,“ Apps”),(a,“ Apps”),(gift,“ Apps”))]
但是我想实现的是RDD [(String,String)]形式的键值对(其中键是一个单词,并且该行中每个单词的值都是相同的类别)
我该如何实现?非常感谢!
Psidom的建议解决了这个问题。解决方案是将rdd.map更改为rdd.flatMap。