【发布时间】:2014-09-07 10:58:15
【问题描述】:
我有一个大文件,其中每一行都是以 id 作为键的记录。
val lines = fileRdd.map(line => (line.id, line))
然后我按 id 对行进行分组
val groupedLines = lines.groupByKey()
因此具有相同 id 的行将被洗牌到一个工作节点。 RDD groupedLines 中的元组就像 id -> 可迭代(line1, line2, ..., lineN) 如果很多行的 id 相同,那么元组的值 Iterable(...) 的大小会很大,如果更大,则表示机器上进程的 JVM 内存限制,可能会出现内存不足的问题。
那么是否存在这个问题,如果是的话,有人知道如何处理这种情况,分组 RDD 中元组的值太大了吗? 我们可以使用 sc.parallelize(t._2.toSeq) 将元组的值更改为另一个嵌套 RDD,例如 RDD[(id,RDD)]
谢谢:P
【问题讨论】:
-
尝试将 spark.shuffle.consolidateFiles 配置参数设置为 true 并将 spark.storage.memoryFraction 设置为 0。另外请列出一些指标 - 文件大小、集群中的内存量。
-
你能指定文件大小你的 RAM 大小和 sparkConf 吗?使用单节点对吗?
标签: apache-spark