Apache spark Apache Spark使用';独特的';和';收集';
有一个很大的RDD映射,我需要使用Apache spark Apache Spark使用';独特的';和';收集';,apache-spark,distinct,rdd,Apache Spark,Distinct,Rdd,有一个很大的RDD映射,我需要使用zipWithIndex val lookupKyes = lookupRaw.keys.distinct().collect() val lookupTable = lookupKyes.zipWithIndex val bcLookUp = sc.broadcast(lookupTable) 问题在于collect和collect,实际上collect()确实需要很长时间。 所以,我的问题是 lookupRaw在每个分区中都有重复的键。distinct()
zipWithIndex
val lookupKyes = lookupRaw.keys.distinct().collect()
val lookupTable = lookupKyes.zipWithIndex
val bcLookUp = sc.broadcast(lookupTable)
问题在于collect和collect,实际上collect()确实需要很长时间。
所以,我的问题是
lookupRaw
在每个分区中都有重复的键。distinct()首先获取唯一的键,然后在驱动程序中收集每个分区中的唯一键coalesce
或partitionby(新的hashpartitioner(n))
来更改分区的#,但它不起作用请分享你的经验。谢谢
collect()
函数将分布式RDD的内容收集到单个spark客户端(单个节点)中。这样做会失去分布式处理的所有好处。看看是否有可能避免使用collect()
你是对的。收集大数据需要避免。但是,到目前为止,每个节点都必须引用一个大型查找表bcLookUp,这就是为什么。所以,如果有,我正在努力寻找解决办法。另外,我想知道distinct在RDD中到底是如何工作的。您能试试val lookupTable=lookupRaw.keys.distinct().zipWithIndex()
看看性能是否有所提高吗