Apache spark Apache Spark使用';独特的';和';收集';

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()

有一个很大的RDD映射,我需要使用
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()
    看看性能是否有所提高吗