Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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
Scala 如何在制作物品地图时减少Spark的洗牌和花费的时间?_Scala_Apache Spark_Apache Spark Mllib - Fatal编程技术网

Scala 如何在制作物品地图时减少Spark的洗牌和花费的时间?

Scala 如何在制作物品地图时减少Spark的洗牌和花费的时间?,scala,apache-spark,apache-spark-mllib,Scala,Apache Spark,Apache Spark Mllib,我正在使用spark读取如下csv文件: x, y, z x, y x x, y, c, f x, z 我想做一张物品与数量的对比图。这是我写的代码: private def genItemMap[Item: ClassTag](data: RDD[Array[Item]], partitioner: HashPartitioner): mutable.Map[Item, Long] = { val immutableFreqItemsMap = data.flatMap(t

我正在使用spark读取如下csv文件:

x, y, z
x, y
x
x, y, c, f
x, z
我想做一张物品与数量的对比图。这是我写的代码:

private def genItemMap[Item: ClassTag](data: RDD[Array[Item]],     partitioner: HashPartitioner): mutable.Map[Item, Long] = {
    val immutableFreqItemsMap = data.flatMap(t => t)
      .map(v => (v, 1L))
      .reduceByKey(partitioner, _ + _)
      .collectAsMap()

    val freqItemsMap = mutable.Map(immutableFreqItemsMap.toSeq: _*)
    freqItemsMap
  }
当我运行它时,它会占用大量的时间和空间。有没有办法缩短时间

我有一个2节点集群,每个集群有2个核心和8个分区。csv文件中的行数为170000


如果你只想做一个独特的项目计数的事情,那么我想你可以采取以下方法

val data: RDD[Array[Item]] = ???

val itemFrequency = data
  .flatMap(arr =>
    arr.map(item => (item, 1))
  )
  .reduceByKey(_ + _)
减少时不要提供任何分区,否则会导致重新洗牌。只需保留它已有的分区即可


还有。。。不要
将分布式数据收集到本地内存对象中,如
映射

问题在于
收集映射
。所有
collect
操作都会在一个执行器上对所有元素进行内存内收集,该执行器会再次传输所有数据。处理真实数据时,应完全删除所有
收集
操作