Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 使用ApacheSpark,如何计算Scala数组中每对的出现次数_Arrays_Scala_Apache Spark - Fatal编程技术网

Arrays 使用ApacheSpark,如何计算Scala数组中每对的出现次数

Arrays 使用ApacheSpark,如何计算Scala数组中每对的出现次数,arrays,scala,apache-spark,Arrays,Scala,Apache Spark,我需要计算Scala数组中存在的每一对的出现次数,然后再分发一对。因此: 我必须统计集群节点的RDD上出现的每一对(即:“在分布式阵列的每一部分上”)。这意味着我将得到x个结果^1,其中x:我的群集节点数 然后,驱动程序必须将结果相加,以了解分布式数组每对的出现次数 ^1:请注意,一个结果是分布式阵列中每对自身部分的集群节点计数。我认为在那里使用HashMap就可以了。顺便说一下,驱动程序也将使用HashMap。驱动程序必须将其HashMap的每种情况与从集群节点接收的HashMap的相应情况相

我需要计算Scala
数组中存在的每一对的出现次数,然后再分发一对。因此:

  • 我必须统计集群节点的
    RDD
    上出现的每一对(即:“在分布式
    阵列的每一部分上”)。这意味着我将得到x个结果^1,其中x:我的群集节点数

  • 然后,驱动程序必须将结果相加,以了解分布式
    数组
    每对的出现次数

  • ^1:请注意,一个结果是分布式
    阵列
    中每对自身部分的集群节点计数。我认为在那里使用
    HashMap
    就可以了。顺便说一下,驱动程序也将使用
    HashMap
    。驱动程序必须将其
    HashMap
    的每种情况与从集群节点接收的
    HashMap
    的相应情况相加

    幻觉:

    似乎您需要“reduceByKeyLocal”:


    ReduceByKeyLocal首先本地映射,本地合并(使用foreachPartition)并调用reduce的操作来共享示例数据集和预期输出?当然!我只是加了一张图表来说明我的话。输入和输出数据集已给出。您能否不粘贴数据的附加图像,而是以可复制的格式粘贴代码和数据?代码非常基本:
    spark\u context.parallelize(my\u input\u dataset\u Array)。
    我不知道在最后一点后放置什么。我知道我想做什么(参见我的图片),但不知道如何使用Spark来做。但我知道Spark正在工作以及一些子机制*我只是不知道如何实现我的目标。
    .map(colorPair=>(colorPair,1))
    是增加出现次数,还是将其设置为1?如果给定节点有2个
    (“蓝色”、“红色”)
    ,则该节点的
    HashMap
    中出现的次数必须为2。因此,您的指令中的“1”似乎是奇怪的否?这是一个经典的“字数”场景-它为每个元素创建JHashMap[K,V],并将它们合并,从而最终成为您想要的-(((“蓝色”、“红色”),n)抱歉没有回答您的问题,但您是正确的,“.map”part只是将每对设置为1根据文档,
    ReduceByKeyLocal/ReduceByToDriver
    是一个简单的
    reduceByKey
    ,它向驱动程序返回一个
    Map
    (这是唯一的区别)。那么,它是否执行隐式的
    collect
    ?*mapPartition—按照它所说的执行—在每个分区上应用map。这通常是处理本地资源所需的*reduce-实际上运行一个“reducePartition”作业它在每个分区上使用reduceLeft,并为合并所有结果的结果定义一个处理程序*reduceByKey-不是一个操作,为了在集群上完成合并结果,它需要洗牌-它的结果实际上是一个Shuffledd。希望这有帮助
        val result: collection.Map[(String, String), Int] = context
          .parallelize(Seq(("BLUE", "RED"), ("RED", "GREEN"), ("YELLOW", "ORANGE")))
          .map(colorPair => (colorPair, 1))
          .reduceByKeyLocally(_ + _)