gpt4 book ai didi

apache-spark - 如何找到RDD的大小

转载 作者:行者123 更新时间:2023-12-02 20:40:01 24 4
gpt4 key购买 nike

我有RDD[Row],它需要保留到第三方存储库中。
但是此第三方存储库在单个调用中最多接受5 MB。

因此,我想基于RDD中存在的数据大小而不是RDD中存在的行数来创建分区。

如何找到RDD的大小并基于它创建分区?

最佳答案

正如贾斯汀(Justin)和王(Wang)提到的那样,获得RDD的大小并非直接。我们可以做一个估计。

我们可以对RDD进行采样,然后使用SizeEstimator获得采样的大小。
正如王和贾斯汀所说,
根据离线取样的大小数据,例如X行使用Y GB离线,运行时Z行可能需要Z * Y / X GB

这是样本scala代码,用于获取RDD的大小/估算值。

我是scala和spark的新手。下面的示例可能会写得更好

def getTotalSize(rdd: RDD[Row]): Long = {
// This can be a parameter
val NO_OF_SAMPLE_ROWS = 10l;
val totalRows = rdd.count();
var totalSize = 0l
if (totalRows > NO_OF_SAMPLE_ROWS) {
val sampleRDD = rdd.sample(true, NO_OF_SAMPLE_ROWS)
val sampleRDDSize = getRDDSize(sampleRDD)
totalSize = sampleRDDSize.*(totalRows)./(NO_OF_SAMPLE_ROWS)
} else {
// As the RDD is smaller than sample rows count, we can just calculate the total RDD size
totalSize = getRDDSize(rdd)
}

totalSize
}

def getRDDSize(rdd: RDD[Row]) : Long = {
var rddSize = 0l
val rows = rdd.collect()
for (i <- 0 until rows.length) {
rddSize += SizeEstimator.estimate(rows.apply(i).toSeq.map { value => value.asInstanceOf[AnyRef] })
}

rddSize
}

关于apache-spark - 如何找到RDD的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49925338/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com