Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.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 如何对大型数据集使用COGROUP_Scala_Apache Spark_Apache Spark Sql - Fatal编程技术网

Scala 如何对大型数据集使用COGROUP

Scala 如何对大型数据集使用COGROUP,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,我有两个rdd即val-tab\u a:rdd[(String,String)]和val-tab\u b:rdd[(String,String)]我使用cogroup来处理以下数据集: val tab_c = tab_a.cogroup(tab_b).collect.toArray val updated = tab_c.map { x => { //somecode } } 我正在为map函数使用tab\u ccogroup值,它对小数据集很好,但在大数据集的情况下,它会抛

我有两个
rdd
val-tab\u a:rdd[(String,String)]
val-tab\u b:rdd[(String,String)]
我使用
cogroup
来处理以下数据集:

val tab_c = tab_a.cogroup(tab_b).collect.toArray

val updated = tab_c.map { x =>
  {
 //somecode
  }
}
我正在为map函数使用
tab\u c
cogroup值,它对小数据集很好,但在大数据集的情况下,它会抛出
内存不足异常

我曾尝试将最终值转换为RDD,但没有出现相同的错误

val newcos = spark.sparkContext.parallelize(tab_c)
1.如何对大型数据集使用Cogroup

2.我们是否可以保留共组值

代码

代码更新:

  val tab_c = tab_a.cogroup(tab_b).filter(x => x._2._1 =!= x => x._2._2)
 // tab_c = {1,Compactbuffer(1,john,US),Compactbuffer(1,john,UK)}
      {2,Compactbuffer(2,john,US),Compactbuffer(2,johnson,UK)}..
错误:

 ERROR LiveListenerBus: SparkListenerBus has already stopped! Dropping event SparkListenerTaskEnd(4,3,ResultTask,FetchFailed(null,0,-1,27,org.apache.spark.shuffle.MetadataFetchFailedException: Missing an output location for shuffle 0
at org.apache.spark.MapOutputTracker$$anonfun$org$apache$spark$MapOutputTracker$$convertMapStatuses$2.apply(MapOutputTracker.scala:697)
at org.apache.spark.MapOutputTracker$$anonfun$org$apache$spark$MapOutputTracker$$convertMapStatuses$2.apply(MapOutputTracker.scala:693)


ERROR YarnScheduler: Lost executor 8 on datanode1: Container killed by YARN for exceeding memory limits. 1.0 GB of 1020 MB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead.

谢谢你

TL;DR
收集

为了安全地运行此代码,在没有其他假设的情况下(工作节点的平均需求可能会大大减少),每个节点(驱动程序和每个执行器)所需的内存将大大超过所有数据的总内存需求

如果要在Spark之外运行它,则只需要一个节点。因此,Spark在这里没有任何好处


但是,如果您跳过collect.toArray,并对数据分布做一些假设,您可能会运行得很好。

TL;DR
收集

为了安全地运行此代码,在没有其他假设的情况下(工作节点的平均需求可能会大大减少),每个节点(驱动程序和每个执行器)所需的内存将大大超过所有数据的总内存需求

如果要在Spark之外运行它,则只需要一个节点。因此,Spark在这里没有任何好处

但是,如果您跳过
collect.toArray
并对数据分发进行一些假设,您可能会运行得很好。

当您使用
collect()
时,您基本上是在告诉spark将所有生成的数据移回主节点,这很容易产生瓶颈。此时,您不再使用Spark,而只是一台机器中的普通阵列

要触发计算,只需使用在每个节点上都需要数据的东西,这就是执行器位于分布式文件系统之上的原因。例如
saveAsTextFile()

请记住,这里的整个目标(即,如果您有大数据)是将代码移动到您的数据并在那里进行计算,而不是将所有数据带到计算中。

当您使用
collect()
时,您基本上是在告诉spark将所有结果数据移回主节点,这很容易产生瓶颈。此时,您不再使用Spark,而只是一台机器中的普通阵列

要触发计算,只需使用在每个节点上都需要数据的东西,这就是执行器位于分布式文件系统之上的原因。例如
saveAsTextFile()


请记住,这里的整个目标(即,如果您有大数据)是将代码移动到您的数据并在那里进行计算,而不是将所有数据都带到计算中。

但是我们需要一个操作来开始执行,是否有任何方法可以跳过
collect()
method并继续使用map函数?@Vignesh任何操作都可以触发spark作业,请尝试take(1)或takeSample(false,1)是的,但问题是来自cogroup的所有数据都会命中驱动程序节点,但我们需要一个操作来开始执行,是否有任何方法可以跳过
collect()
方法并继续使用映射函数?@Vignesh任何操作都可以触发spark作业,尝试take(1)或takeSample(false,1)是,但问题是cogroup中的所有数据都会命中驱动程序节点树,但即使将函数从
collect()
更改为
filter()
抛出
错误YarnScheduler:datanode1上的执行器8丢失:容器因超出内存限制而被纱线杀死。使用了1.0 GB的1020 MB物理内存。考虑提升火花。纱线。执行器。内存开销< /代码>。即使没有火花,当你拥有的数据多于内存时,情况总是如此。如果数据太倾斜(例如,在相同键下的很多),或者尝试考虑增加可用内存,那么尝试将总大小减小到调用链上的操作(如过滤器、连接或聚合)。同意,但即使将函数从
collect()
更改为
filter()
后仍会抛出
Error YarnScheduler:datanode1上丢失的执行器8:容器因超出内存限制而被纱线杀死。使用了1.0 GB的1020 MB物理内存。考虑提升火花。纱线。执行器。内存开销< /代码>。即使没有火花,当你拥有的数据多于内存时,情况总是如此。如果数据太倾斜(例如,在相同键下的很多),或者尝试考虑增加可用内存,那么尝试将总大小减小到调用链上的操作(如过滤器、连接或聚合)。
 ERROR LiveListenerBus: SparkListenerBus has already stopped! Dropping event SparkListenerTaskEnd(4,3,ResultTask,FetchFailed(null,0,-1,27,org.apache.spark.shuffle.MetadataFetchFailedException: Missing an output location for shuffle 0
at org.apache.spark.MapOutputTracker$$anonfun$org$apache$spark$MapOutputTracker$$convertMapStatuses$2.apply(MapOutputTracker.scala:697)
at org.apache.spark.MapOutputTracker$$anonfun$org$apache$spark$MapOutputTracker$$convertMapStatuses$2.apply(MapOutputTracker.scala:693)


ERROR YarnScheduler: Lost executor 8 on datanode1: Container killed by YARN for exceeding memory limits. 1.0 GB of 1020 MB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead.