如何在spark-scala中将文件中的值转换为Map?

时间:2016-02-18 07:02:50

标签: scala apache-spark

我将文件中的值作为逗号分隔。现在,我希望将此数据转换为键值对(地图)。我知道我们可以将值拆分并存储在如下所示的数组中。

val prop_file = sc.textFile("/prop_file.txt") 
prop_file.map(_.split(",").map(s => Array(s)))

有没有办法将数据存储为spark-scala中的Map?

2 个答案:

答案 0 :(得分:1)

假设文件的每一行都包含2个值,其中第一个单词是Key,next是value,用空格分隔: -

A 1
B 2
C 3

可以这样做: -

val file = sc.textFile("/prop_file.txt") 
val words = file.flatMap(x => createDataMap(x))

这是你的功能 - createDataMap

def createDataMap(data:String): Map[String, String] = {

 val array = data.split(",")
 //Creating the Map of values
 val dataMap = Map[String, String](
 (array(0) -> array(1)),
 (array(2) -> array(3))
)
return dataMap
}

接下来,要从RDD中检索键/值,您可以利用以下操作: -

//This will print all elements of RDD
words.foreach(f=>println(f))
//Or You can filter the elements too.
words.filter(f=>f._1.equals("A"))

答案 1 :(得分:0)

Sumit,我使用下面的代码来检索特定键的值,并且它有效。

val words = file.flatMap(x => createDataMap(x)).collectAsMap
val valueofA = props("A")
print(valueofA)

这给了我一个结果