2015-07-24 3 views
3

В Spark вы можете использовать определенную пользователем функцию для mapPartitions. Теперь мой вопрос: как я могу передать ему аргумент. Например, на данный момент у меня есть что-то вроде этого, которое вызывается с помощью rdd.mapPartitions(userdefinedFunc).Как передать аргумент пользовательской функции для mapPartitions в Spark?

def userdefinedFunc(iter: Iterator[(Long, Array[SAMRecord])]) : Iterator[(Long, Long)] = 
{ 
    val res = scala.collection.mutable.ArrayBuffer.empty[(Long, Long)] 

    // Code here 

    res.iterator 
} 

Однако, я также хочу постоянной в качестве аргумента в этой пользовательской функции, таким образом, что, например, он выглядит следующим образом.

def userdefinedFunc(iter: Iterator[(Long, Array[SAMRecord])], someConstant: Long) : 
Iterator[(Long, Long)] = 
{ 
    val res = scala.collection.mutable.ArrayBuffer.empty[(Long, Long)] 

    // Code here 

    res.iterator 
} 

Теперь, как я называю эту функцию с mapPartitions. Я получаю сообщение об ошибке, если я просто использую rdd.mapPartitions(userdefinedFunc(someConstant)).

ответ

3

Используйте функцию карринг как:

def userdefinedFunc(someConstant: Long)(iter: Iterator[(Long, Array[SAMRecord])]): Iterator[(Long, Long)] 

userdefinedFunc(someConstant) Тогда будет функция с типом (iter: Iterator[(Long, Array[SAMRecord])]) => Iterator[(Long, Long)], что вы можете перейти к mapPartitions.

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