Подтвердить что ты не робот

Как я могу найти размер RDD

У меня есть RDD[Row], который нужно сохранить в стороннем репозитории. Но этот сторонний репозиторий принимает максимум 5 МБ за один вызов.

Итак, я хочу создать раздел на основе размера данных, присутствующих в RDD, и не основываться на количестве строк, присутствующих в RDD.

Как я могу найти размер RDD и создавать на нем разделы?

4b9b3361

Ответ 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

Это будет зависеть от таких факторов, как сериализация, поэтому она не разрезается и не суха. Тем не менее, вы можете взять набор образцов и провести некоторое экспериментирование с данными образца, экстраполируя оттуда.