Sou*_*tra 4 scala apache-spark
我有一个RDD(String数组)org.apache.spark.rdd.RDD[String] = MappedRDD[18]
并将其转换为具有唯一ID的地图.我做了' val vertexMAp = vertices.zipWithUniqueId'但这给了我另一种类型的RDD,'org.apache.spark.rdd.RDD[(String, Long)]'但我想要一个' Map[String, Long]'.我该如何转换我的' org.apache.spark.rdd.RDD[(String, Long)] to Map[String, Long]'?
谢谢
maa*_*asg 24
有一个内置collectAsMap函数PairRDDFunctions可以为您提供RDD中对值的映射.
val vertexMAp = vertices.zipWithUniqueId.collectAsMap
Run Code Online (Sandbox Code Playgroud)
重要的是要记住RDD是一种分布式数据结构.您可以将其可视化为在群集上传播的数据的"部分".当你collect,你强迫所有这些部分去驱动程序,并能够做到这一点,他们需要适应驱动程序的内存.
从评论看起来,在您的情况下,您需要处理大型数据集.制作地图不会起作用,因为它不适合驾驶员的记忆; 如果你尝试,会导致OOM异常.
您可能需要将数据集保留为RDD.如果要创建Map以查找元素,则可以使用lookupPairRDD,如下所示:
import org.apache.spark.SparkContext._ // import implicits conversions to support PairRDDFunctions
val vertexMap = vertices.zipWithUniqueId
val vertixYId = vertexMap.lookup("vertexY")
Run Code Online (Sandbox Code Playgroud)
收集到"本地"机器,然后将Array [(String,Long)]转换为Map
val rdd: RDD[String] = ???
val map: Map[String, Long] = rdd.zipWithUniqueId().collect().toMap
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24859 次 |
| 最近记录: |