Добавление новых членов в RDD

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

Я пытаюсь добавить новые переменные-члены в класс RDD.scala, а затем получить доступ к этим переменным, когда доступ к rdd осуществляется с рабочего узла (исполнителей). В этом ответе один из участников искры упоминает, что в исполнителях можно вызывать только определенные методы RDD. Итак, мне интересно, как именно я могу добавить новое поле участника в RDD.scala, чтобы к нему можно было получить доступ в исполнителе?


person RagHaven    schedule 26.04.2015    source источник


Ответы (1)


Как насчет добавления этих переменных в класс Partition вашего RDD?

Вы знаете, в spark задача напрямую не сопоставляется с преобразованием одного RDD, это может быть комбинация нескольких RDD. Следовательно, то, что вам нужно для доступа к исполнителю, довольно неясно, я предполагаю, что вам нужны переменные, доступные для метода compute(part: Partition, context: TaskContext) RDD, который выполняется в исполнителях.

Как объясняет подпись compute, она получит только Partition и TaskContext, учитывая, что TaskContext связано с несколькими преобразованиями и прозрачно для RDD, ответ может существовать только в Partition.

Partition создается в методе getPartitions, который вызывается в драйвере, и вы можете переопределить getPartitions вашего RDD, чтобы возвращать определенный тип Partition.

Поэтому вся процедура, которую я предлагаю:

  1. создать class YourPartition(rddId: Int, idx: Int, val your_variable: Any, val your_second_variable: Any .....) extends Partition
  2. переопределить def getPartitions: Array[Partition], которые возвращают Array[YourPartition]
  3. В compute(part: Partition, context: TaskContext) отлейте деталь как экземпляр YourPartition и используйте созданные там поля.
person yjshen    schedule 27.04.2015