Есть ли способ собрать все RDD[(String, String)]
в один RDD[Map[String, String]]
?Spark RDD [(String, String)] в RDD [Карта [String, String]]
Е.Г., для файла input.csv
:
1,one
2,two
3,three
Код:
val file = sc.textFile("input.csv")
val pairs = file.map(line => { val a = line.split(","); (a(0), a(1)) })
val rddMap = ???
выход (приблизительно):
val map = rddMap.collect
map: Array[scala.collection.immutable.Map[String,String]] = Array(Map(1 -> one, 2 -> two, 3 -> three))
Пробовал pairs.collectAsMap
но он возвращает Map
не внутри RDD
.
Но почему вы хотите получить карту внутри RDD? RDD - это коллекция, и, насколько я могу судить по вашему коду, вы просто хотите одну карту, поэтому нет смысла обертывать ее RDD только одним элементом. –
Я хочу кэшировать эту карту между несколькими заданиями. Все решения, которые я нашел, работали с RDD, а не с обычными объектами. – red1ynx
По-прежнему спрашивайте себя, хотите ли вы поделится «RDD [Map [String, String]]. Таким образом, вы не можете смириться с параллелизмом.Если карта мала и вам действительно нужна карта, возможно, посмотрите на широковещательные переменные и аккумуляторы (https://spark.apache.org/docs/latest/programming-guide.html#shared-variables). –