Вы можете сначала сэмплировать разделы, а затем сэмплировать их. Таким образом, вам не нужно полное сканирование таблицы, но она работает только в том случае, если само разбиение является случайным. AFAIK, вам нужно использовать RDD API для этого. Это может выглядеть так (вставьте числа, соответствующие желаемому количеству образцов):

аюсь выполнить простую случайную выборку со Scala из существующей таблицы, содержащей около 100e6 записей.

import org.apache.spark.sql.SaveMode

val nSamples = 3e5.toInt
val frac = 1e-5
val table = spark.table("db_name.table_name").sample(false, frac).limit(nSamples)
(table
  .write
  .mode(SaveMode.Overwrite)
  .saveAsTable("db_name.new_name")
)

Но это занимает слишком много времени (~ 5 часов по моим оценкам).

Полезная информация:

У меня ~ 6 рабочих. Анализируя количество разделов таблицы я получаю:11433.

Я не уверен, разумно ли соотношение разделов и рабочих.

Я использую Spark 2.1.0, используя Scala.

Я пытался:

Удаление.limit() часть.

измененияfrac в1.0, 0.1, и т.д.

Вопрос: как я могу сделать это быстрее?

Лучший,

Ответы на вопрос(2)

Ваш ответ на вопрос