将scd中的RDD [Array [(String,String)]]类型转换为RDD [(String,String)]

问题描述 投票:-1回答:1

我是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)]形式的键值对(其中键是一个单词,并且该行中每个单词的值都是相同的类别)

我该如何实现?非常感谢!

scala apache-spark rdd
1个回答
0
投票

Psidom的建议解决了这个问题。解决方案是将rdd.map更改为rdd.flatMap。

© www.soinside.com 2019 - 2024. All rights reserved.