Я пытаюсь написать функцию, которая должна возвращать разные пары в зависимости от ввода. Я переопределил «+ - / *» в Scala для своего конкретного использования. Каждый ( +, -,* ,/) имеет три реализации на основе ввода. У меня есть RDD и Float в качестве входных данных, поэтому это может быть + между RDD и RDD, или Float и RDD, или Float и Float и так далее.
Теперь у меня есть синтаксический анализатор, который считывает выражение из ввода, например: RDD+1 , анализирует его и создает постфикс, чтобы упростить вычисления, например: RDD1+ , а затем я хочу выполнить расчет, используя реализованный + . с помощью этого алгоритма я пытаюсь изменить его таким образом, чтобы он выполнял вычисления на основе моего входного выражения. Например, он содержит:
var lastOp: (Float, Float) => Float = add
Как я могу изменить это: (Float, Float) => Float
на что-то, что будет принимать (RDD, Float)|(RDD, RDD) |(Float, Float) => RDD = add
// моя реализация add ???
Версия:
Я добавил эту часть с помощью двух ответов ниже: Хорошо, я написал это:
def lastop:(Either[RDD[(Int,Array[Float])], Float], Either[RDD[(Int,Array[Float])], Float]) => RDD[(Int,Array[Float])] = sv.+
в котором sv является экземпляром из моего другого класса, который я переопределил + в этом, но двумя разными способами, поэтому теперь я получаю сообщение об ошибке, которое, я думаю, связано с тем, что компилятор запутался в том, какую реализацию использовать, это
error: type mismatch;
[error] found : (that: org.apache.spark.rdd.RDD[(Int, Array[Float])])org.apache.spark.rdd.RDD[(Int, Array[Float])] <and> (that: Float)org.apache.spark.rdd.RDD[(Int, Array[Float])]
[error] required: (Either[org.apache.spark.rdd.RDD[(Int, Array[Float])],Float], Either[org.apache.spark.rdd.RDD[(Int, Array[Float])],Float]) => org.apache.spark.rdd.RDD[(Int, Array[Float])]
Примечание: он говорит, что нашел две разные реализации для "+"