Map Reduce program to calculate the average and count

581 Views Asked by At

I am trying to calculate the taxi and its trip using map reduce python program. In Map program I have written the following code where it will assign each row a key.

import sys

for line in sys.stdin:
    line = line.strip()
    words = line.split(",")
    trip = words[0]
    km = words[1]

    print('%s\t%s\t%s' % (trip, km, "1"))

Next while in reducer below is the program.

#!/usr/bin/env python3

import sys
current_trip = None
current_km = 0
current_count = 0
trip = None
gender = None

for line in sys.stdin:
    line = line.strip()
    trip,gender,count = line.split(",")
    try:
        count = int(count)
    except ValueError:
        continue
    if current_trip == trip:
        current_km = (km + current_km)
        current_count += count
        print('%s\t%s' % (current_trip,current_count, {current_km/current_count}))
        current_trip = trip
        current_count = count
        current_km = 0
    else:
        if current_trip == trip:
            current_count += count
            print('%s\t%s' % (current_trip, current_count,km))

Here I am getting the error saying

Traceback (most recent call last):
  File "reducer.py", line 23, in <module>
    print('%s\t%s\t%s' % (current_trip, current_count, {current_km / current_count}))
ZeroDivisionError: division by zero

and I am not able to debug properly because if I include the print statement it is not printing in output.

Can someone please help

1

There are 1 best solutions below

0
Hussein Awala On

If the first line contains a count 0, or you have negative counts and at some point the current_count is 0, you will get this error. Try to add a condition before your print method to debug the problem:

if current_count != 0:
    print('%s\t%s' % (current_trip,current_count, {current_km/current_count}))
else:
    print(f"error: the current_count is 0 and the count is {count}")