Использование Mrjob в Python, чтобы найти вывод с самой низкой суммой - PullRequest
0 голосов
/ 16 апреля 2019

Мне нужна помощь при выводе метода оплаты, который имел наименьшую сумму общего дохода (суммы) для продаж.Прямо сейчас код выводит общую сумму для всех способов оплаты (Visa, Mastercard, Discover и т. Д.), Но мне нужно, чтобы он выводил только тот метод оплаты, который имел наименьшую сумму.

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

"""
 Python script to find the total amount of sales revenue for each payment mode
 using Map-Reduce framework (mapper, combiner, and reducer functions) with mrjob package
"""
from mrjob.job import MRJob

class ModeRevenue(MRJob):
# each input lines consists of city, productCategory, price, and paymentMode

    # Initialize the count value
    count = 0

    def mapper(self, _, line):
        # create a key-value pair with key: paymentMode and value: price
        line_cols = line.split(',')
        yield line_cols[3], float(line_cols[2])

    def combiner(self, mode, counts):
        # consolidates all key-value pairs of mapper function (performed at mapper nodes)
        yield mode, sum(counts)

    def reducer(self, mode, counts):
        # final consolidation of key-value pairs at reducer nodes
        self.count += 1

        if self.count <= 5:
          yield mode, '${:,.2f}'.format(sum(counts))


if __name__ == '__main__':
    ModeRevenue.run()

Мне нужноВывод будет одним способом оплаты, который будет самым низким по доходу вместо всех.

Ожидаемый:

"Discover"      "$24,922,765.13"

Фактический:

"Amex"  "$25,027,699.58"
"Cash"  "$25,030,603.02"
"Discover"      "$24,922,765.13"
"MasterCard"    "$24,952,916.42"
"Visa"  "$25,121,673.01"
...