#apache-spark
#apache-spark
Вопрос:
Я запускаю приложение Spark, которое принимает таблицу mysql (30 миллионов строк) и находит шаблоны.
val sqlContext = new SQLContext(sc)
sqlContext
.read.format("jdbc").option("driver", "com.mysql.jdbc.Driver")
.option("url", url)
.option("dbtable", "MyTable")
.option("user", "MyUser").option("password", "MyPwd")
.load().registerTempTable("MyTable")
def getPattern(patent: String) = patent.replaceAll("\d", "d")
sqlContext.sql("select distinct(code) from MyTable")
.map(_.getString(0))
.groupBy(getPattern)
.mapValues(_.size)
.saveAsTextFile("/tmp/result")
Я запускаю приложение на локальном хосте. Сбой приложения с:
2016-09-30 15:11:47,812 [dispatcher-event-loop-4] WARN HeartbeatReceiver - Removing executor driver with no recent heartbeats: 129149 ms exceeds timeout 120000 ms
2016-09-30 15:11:47,819 [dispatcher-event-loop-4] ERROR TaskSchedulerImpl - Lost executor driver on localhost: Executor heartbeat timed out after 129149 ms
Почему это так? это проблема с памятью?
Это проблема с подключением к mysql?
Я знаю, что я мог бы заменить .groupBy(getPattern).mapValues(_.size)
на .map(getPattern).countByValue
, сделав его более эффективным и, возможно, избежать ошибки. Однако этот вопрос касается понимания ошибки.
Комментарии:
1. Вы когда-нибудь получали ответ на это (здесь или где-то еще)? У меня аналогичная проблема.
2. нет 🙁 ………