Как я могу найти размер RDD
У меня есть RDD[Row]
, который нужно сохранить в стороннем репозитории.
Но этот сторонний репозиторий принимает максимум 5 МБ за один вызов.
Итак, я хочу создать раздел на основе размера данных, присутствующих в RDD, и не основываться на количестве строк, присутствующих в RDD.
Как я могу найти размер RDD
и создавать на нем разделы?
Ответы
Ответ 1
Как Джастин и Ван упомянул, что не просто получить размер RDD. Мы можем просто сделать оценку.
Мы можем пробовать RDD, а затем использовать SizeEstimator, чтобы получить размер выборки.
Как упоминал Ван и Джастин,
на основе данных размера, выбранных в автономном режиме, скажем, X строк, используемых Y в автономном режиме, Z строк во время выполнения может принимать Z * Y/X GB
Вот пример кода scala, чтобы получить размер/оценку RDD.
Я новичок в scala и искрах. Ниже образец может быть написан лучшим способом
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
}
Ответ 2
Одним прямым способом является вызов следующего, в зависимости от того, хотите ли вы сохранить данные в сериализованной форме или нет, затем перейдите на страницу "Хранилище" пользовательского интерфейса, вы сможете определить общий размер RDD (память + диск):
rdd.persist(StorageLevel.MEMORY_AND_DISK)
or
rdd.persist(StorageLevel.MEMORY_AND_DISK_SER)
Нелегко вычислить точный размер памяти во время выполнения. Вы можете попробовать сделать оценку во время выполнения: на основе данных размера, выбранных в автономном режиме, скажем, X строк, используемых Y в автономном режиме, Z строк во время выполнения может занимать Z * Y/X GB; это похоже на предложение Джастина ранее.
Надеюсь, это поможет.
Ответ 3
Я думаю, что RDD.count() даст вам количество элементов в RDD
Ответ 4
Это будет зависеть от таких факторов, как сериализация, поэтому она не разрезается и не суха. Тем не менее, вы можете взять набор образцов и провести некоторое экспериментирование с данными образца, экстраполируя оттуда.