o RDD boyutunu almak doğru değildir bahsettiniz. Bir tahminde bulunabiliriz.
Biz örnek büyüklüğünü elde etmek SizeEstimator kullanmak sonra RDD örneklemek ve edebilirsiniz. diyelim ki, çevrimdışı örneklenmiş boyut verilerine dayanarak Wang ve Justin de belirtildiği gibi, X satırlar çevrimdışı çalışma zamanında Z satırlar Z sürebilir Y GB kullanılan * Y/X GB
İşte
yardımcı olmak üzere örnek scala kodudur RDD'nin boyutu/tahmini.
Scala ve kıvılcım yeniyim. Numune daha iyi bir şekilde
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
}
YARN RDD boyutunu nasıl alıyor? İşlerim var ve RDD boyutumun GB cinsinden tahminleri var, ancak bu bilgiye kıvılcım kodumun içinden erişemiyorum. –
Üzgünüm, YARN'de Spark kullanmıyorum. Veritabanları kullanıyorum. – sag
hakkında çok fazla şey bilmiyorum value.asInstanceOf [AnyRef] değerini daha iyi tahmin etmek için toString'i degerlendirdikten sonra value.toString değeri null olarak boş bir gösterici atabilir ve bu sorun yok gibi görünüyor. ayrıca daha güvenli. – lockwobr