我有一个大文件,其中每一行都是一个id为key的记录。
val lines = fileRdd.map(line => (line.id, line))
然后我按ID
对行进行分组val groupedLines = lines.groupByKey()
因此具有相同id的行将被混洗到一个工作节点。 RDD groupsLines中的元组就像 id - > Iterable(line1,line2,...,lineN) 如果许多行具有相同的id,那么元组的值 Iterable(...)的大小将非常大,如果它大于那么JVM的内存限制在机器上进程,可能会出现内存不足问题。
那么这个问题是否存在,如果是,是否有人知道如何处理这种情况,分组RDD中元组的值太大? 我们可以只使用 sc.parallelize(t._2.toSeq)将元组的值更改为另一个嵌套的RDD,类似于 RDD [(ID,RDD)]
谢谢:P
答案 0 :(得分:0)
您可能需要将spark.executor.memory
增加到大于您当前使用的值。建议为5g
。
您能提供此类错误的堆栈跟踪吗?
答案 1 :(得分:0)
def groupByKey(numPartitions:Int):RDD [(K,Seq [V])]
尝试增加参数
numPartitions