У меня проблемы с чтением данных из AWS Redshift в мой кластер Spark. Время чтения истекло, что привело к сбою задания искры. Я использую следующее для извлечения данных в фрейм данных:
def retrieveFromDate(date: String): org.apache.spark.sql.DataFrame = {
val query = "tstamp >= '2018-01-01' and tstamp < '2018-01-02'"
val predicates = Array[String](query)
val props = new Properties()
props.put("user", "username")
props.put("password", "password")
spark.read
.jdbc(url=jdbcURL,
table="myschema.mytable",
predicates=predicates,
connectionProperties=props)
}
Следующий запрос непосредственно в SQL быстро возвращает 24 миллиона строк:
select * from myschema.mytable
WHERE tstamp >= '2018-08-01'
AND tstamp < '2018-08-02';
В Spark задание не выполняется в тот момент, когда я выполняю какие-либо действия с кадром данных, включая только count
.
Если я предоставлю дополнительный предикат, например, указав другое предложение WHERE
, чтобы результирующий набор был очень маленьким, все работало идеально. Почему этот запрос настолько медленный в искре, когда он прекрасно работает прямо в SQL? Есть ли что-нибудь, что я могу сделать, чтобы загрузить таблицу результатов такого большого размера из красного смещения в искру?
Мой кластер AWS EMR для разработки содержит мастер M4.xlarge и 2 рабочих M3.xlarge. Это примерно 15 ГБ оперативной памяти и 8 процессорных ядер на одного работника.