Spark: увеличить размер RDD, используя образец с заменой - PullRequest
0 голосов
/ 17 мая 2018

У меня есть RDD [(String, Array [String])], и мне нужно скопировать данные внутри, чтобы увеличить их размер.

Я читал здесь https://stackoverflow.com/a/41787801/9759150 с заменой, вы можете получить один и тот же элемент в образце дважды.

Например:

Если RDD.count (), скажем, 35 ​​элементов, и мне нужно сгенерировать из него RDD с 200 элементами. Как я могу это сделать?

Я видел, как применение образца выглядит так:

val sampledRDD = rdd.sample(true, fraction, seed)

Я не знаю, как выбрать параметр fraction для моей проблемы.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Я проводил несколько тестов и понял, что .sample () может делать то, что я хотел!Ключ должен быть с заменой в true (как я уже сказал в вопросе), seed может быть любым (число, конечно), но fraction должно быть:

val fraction = num_new.toDouble / rdd.count()  // following my examle: num_new is 200, and rdd.count() is 35

val sampledRDD = rdd.sample(true, fraction, seed)

Вв этом случае, fraction = 5.71428571428571, это означает, что sampledRDD будет иметь каждый элемент fraction повторений.

0 голосов
/ 17 мая 2018

Вы можете увидеть этот ответ для получения дополнительной информации о значении дроби в rdd.sample ().Короче говоря, это представляет вероятность получения образца.Это означает, что окончательное значение rdd не будет гарантированно равным указанной дроби * оригинального размера.

Я бы подошел к этому в противоположном направлении:

  1. Сначала создайте RDD, который является просто исходным RDD, повторенным несколько раз
  2. Теперь, образец изчто RDD до размера, который вы хотите.

Что-то вроде:

val rdds = (1 to 10).map(_ => originalRdd)
val bigRdd = sc.union(rdds)
val sampledRdd = bigRdd.sample(true, fraction, seed)

и установите дробь так, чтобы конечный СДР соответствовал нужному размеру:

val fraction = numResultsIWant/100*originalRdd.count()

и мы выбрали 10потому что это было количество копий СДР, которые мы создали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...