A amostra do Spark está muito lenta
Estou tentando executar uma amostra aleatória simples com Scala a partir de uma tabela existente, contendo cerca de 100e6 registros.
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")
)
Mas está demorando muito (~ 5h pelas minhas estimativas).
Informação útil:
Eu tenho ~ 6 trabalhadores. Analisando o número de partições da tabela, recebo:11433
.
Não tenho certeza se a proporção de partições / trabalhadores é razoável.
Estou executando o Spark 2.1.0 usando Scala.
Eu tentei:
Removendo o.limit()
parte.
Mudandofrac
para1.0
, 0.1
, etc.
Pergunta: como posso torná-lo mais rápido?
melhor,