想象一下,我有一个有100条记录的RDD,我用10分区,所以每个分区现在有10条记录我只是转换为rdd到键值对rdd并保存到文件现在我的输出数据被分成10个分区对我来说没问题,但最好在将输出数据保存到文件之前使用合并功能吗?例如rdd.coalesce(1)这只给出了一个文件作为输出它是不是在数据内部节点洗牌?想知道应该使用合并的地方。
由于
答案 0 :(得分:0)
如果您不需要,请避免使用coalesce
。仅用它来减少生成的文件数量。
答案 1 :(得分:0)
与任何事情一样,取决于您的用例; coalesce()
可用于增加或减少分区数量,但会产生与之相关的成本。
如果您尝试增加分区数(shuffle
参数必须设置为true),则会产生通过HashPartitioner
重新分发数据的成本。如果您尝试减少分区数,则shuffle
参数可以设置为false,但是从当前分区集中主动获取的节点数将是您要合并到的分区数。例如,如果要合并到1个分区,则只有1个节点在从父分区中提取数据时处于活动状态(如果要合并大量数据,这可能会很危险)。
合并可能很有用,但有时您可以通过降低分区集大小(例如在过滤器或稀疏内部联接之后)来提高作业效率。
答案 2 :(得分:0)
你可以像这样使用它
IPAddress = new QTextEdit("Current IP Address: \n", this);
QString tem = QString::number(system("hostname -I"));
IPAddress->append(tem);
IPAddress->setStyleSheet("QTextEdit{border: none;outline:none;border-image: none;}");
IPAddress->show();
如果您减少分区,它不会随机播放数据,但如果增加分区,则不会随机播放数据。它根据用例。但我们小心使用它,因为如果你减少分区小于或不等于你的集群中的核心数,那么它就不能使用集群的全部资源。有时候,像你这样减少ruffd数据或网络IO会减少rdd分区但是等于分区数量,这样可以提高你系统的性能。