我知道一些Spark操作,如
这已经在文档中引用了。
另一个相关的SE问题:当按键分组时,Spark会耗尽内存 我已经了解到
collect()
会导致性能问题。这已经在文档中引用了。
因为要在驱动程序上打印所有元素,可以使用collect()方法将RDD首先带到驱动节点,从而:
rdd.collect().foreach(println)
。但是,这可能会导致驱动程序内存不足。
collect()
将整个RDD提取到单个计算机上;如果您只需要打印RDD的几个元素,则更安全的方法是使用take()
: rdd.take(100).foreach(println)
。另一个相关的SE问题:当按键分组时,Spark会耗尽内存 我已经了解到
groupByKey(),reduceByKey()
可能会导致内存不足,如果并行度未正确设置。
我没有足够的证据来了解其他转换和操作命令,这些命令必须谨慎使用。
这三个命令是唯一需要处理的吗?我对以下命令也有疑问
aggregateByKey()
sortByKey()
persist()
/cache()
如果您提供关于强制执行命令(跨分区全局而不是单个分区或低性能命令)的信息,那将是很好的,这些命令需要更好的保护。
collect
。然后,您创建的RDD仍将以缓存形式保存在调用cache()
之前的转换形式中。 - szefuf