Вы можете использовать Scala в будущем и Spark Fair Scheduling, например
import scala.concurrent._
import scala.concurrent.duration._
import ExecutionContext.Implicits.global
object YourApp extends App {
val sc = ... // SparkContext, be sure to set spark.scheduler.mode=FAIR
var pool = 0
// this is to have different pools per job, you can wrap it to limit the no. of pools
def poolId = {
pool = pool + 1
pool
}
def runner(i: Int) = Future {
sc.setLocalProperty("spark.scheduler.pool", poolId)
val data:DataFrame = DataContainer.getDataFrame(i) // get DataFrame
val x = new MyClass(data) // initialize MyClass with new Object
x.setSettings(...)
x.calcSomething()
x.saveResults()
}
val l = List(34, 32, 132, 352) // Scala List
val futures = l map(i => runner(i))
// now you need to wait all your futures to be completed
futures foreach(f => Await.ready(f, Duration.Inf))
}
С помощью FairScheduler и различных пулов каждая параллельная работа будет иметь справедливую долю ресурсов искрового кластера.
Некоторые ссылки на будущее scala здесь . Возможно, вам придется добавить необходимые обратные вызовы при завершении, успехе и / или сбоях.
С помощью метода toBlob () все работает. Вот код работы:
public capture() {
const ctx = this.canvas.nativeElement.getContext('2d');
ctx.drawImage(this.video.nativeElement, 0, 0, this.video.nativeElement.width, this.video.nativeElement.height);
this.canvas.nativeElement.toBlob((result) => {
this.img = result;
console.log(this.img);
this.detectFace(this.img);
this.detectSkinColor(this.img);
});
}