2015-04-06 2 views
2

Можно ли отменить будущее искры и по-прежнему получить меньшую RDD с обработанными элементами?Частичные результаты искрового интерфейса Async?

Свечи Async Действия «документированы» здесь

http://spark.apache.org/docs/1.2.1/api/scala/index.html#org.apache.spark.rdd.AsyncRDDActions

И само будущее имеет богатый набор функций

http://spark.apache.org/docs/1.2.1/api/scala/index.html#org.apache.spark.FutureAction

Прецедент я думал должен иметь очень огромная карта, которая может быть прервана на 30 минут вычисления и по-прежнему собирать -или даже итерировать или сохранятьAsObjectFile - подмножество RDD, которое было эффективно отображено.

ответ

2

FutureAction.cancel вызывает сбой (см. comment in JobWaiter.scala), поэтому вы не можете использовать его для получения частичных результатов. Я не думаю, что есть способ сделать это через асинхронный API.

Вместо этого вы можете прекратить обработку ввода через 30 минут.

val stopTime = System.currentTimeMillis + 30 * 60 * 1000 // 30 minutes from now. 
rdd.mapPartitions { partition => 
    if (System.currentTimeMillis < stopTime) partition.map { 
    // Process it like usual. 
    ??? 
    } else { 
    // Time's up. Don't process anything. 
    Iterator() 
    } 
} 

Имейте в виду, что это имеет значение только после завершения всех изменений в случайном порядке. (Он не может остановить перетасовку, даже если прошло 30 минут.)

+0

Это совершенно непроверено. Дайте мне знать, если это сработает! –

+1

:-) Я предполагаю, что все асинхронные функции также непроверены, по крайней мере, на производственных площадках. – arivero

Смежные вопросы