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

Как Sparks RDD.randomSplit фактически разделяет RDD

Итак, пусть у меня есть rdd с 3000 строк. Первые строки 2000 относятся к классу 1, а 1000 последних строк относятся к классу 2. RDD разделен на 100 разделов.

При вызове RDD.randomSplit(0.8,0.2)

Функция также перетасовывает rdd? Наше разделение просто пробует 20% непрерывно из rdd? Или он выбирает 20% разделов случайным образом?

В идеале результирующий раскол имеет такое же распределение классов, что и исходное RDD. (то есть 2: 1)

Спасибо

4b9b3361

Ответ 1

Для каждого диапазона, определенного массивом weights, существует отдельное преобразование mapPartitionsWithIndex, которое сохраняет разделение.

Каждый раздел выбирается с помощью набора BernoulliCellSamplers. Для каждого разделения он выполняет итерацию по элементам данного раздела и выбирает элемент, если значение следующего случайного Double находится в заданном диапазоне, определяемом нормализованными весами. Все пробоотборники для данного раздела используют одно и то же семя RNG. Это означает:

  • не перетасовывает RDD
  • не принимает непрерывных блоков, кроме случайных
  • принимает произвольную выборку из каждого раздела
  • принимает неперекрывающиеся образцы
  • требуется передача n-split по данным