У меня есть DataSpark PySpark с именем DF с (K, V) парами. Я хотел бы применить несколько функций с помощью ReduceByKey. Например, я следующие три простые функции:Pyspark RDD ReduceByKey Множественная функция
def sumFunc(a,b): return a+b
def maxFunc(a,b): return max(a,b)
def minFunc(a,b): return min(a,b)
Когда я применяю только одну функцию, например ,, следующие три работы:
DF.reduceByKey(sumFunc) #works
DF.reduceByKey(maxFunc) #works
DF.reduceByKey(minFunc) #works
Но, когда я применять более чем одну функцию, ее не работает, например, следующие действия не работают.
DF.reduceByKey(sumFunc, maxfunc, minFunc) #it does not work
DF.reduceByKey(sumFunc, maxfunc) #it does not work
DF.reduceByKey(maxfunc, minFunc) #it does not work
DF.reduceByKey(sumFunc, minFunc) #it does not work
Я не хочу использовать groupByKey
, поскольку он замедляет вычисления.
Можете ли вы также использовать метод RDD для нескольких экземпляров StatCounter? Например, если вы хотите использовать min/max для разных столбцов в одной и той же совокупности? – Matthias
Я попытался использовать ваш пример StatCounter. Но когда я пытаюсь использовать его с ключом-значением RDD со строковым-float, то я получаю эту ошибку: TypeError: unbound метод merge() должен быть вызван с экземпляром NoneType в качестве первого аргумента (вместо этого был получен экземпляр StatCounter) – Matthias
@Matthias I don ' t использовать Python 2. Если вы используете 2.x, вам придется использовать функции, которые используют определенные экземпляры, которые вы получаете в seq-op и merge-op. – zero323