Объединяя мои результаты, чтобы не создавать еще один картограф - PullRequest
0 голосов
/ 23 марта 2020

Я работаю над проектом MapReduce и хотел улучшить вывод. Я использую файл CSV с датой на билетах, которые выдаются, и мне нужно увидеть, какие цвета машин продаются больше всего. Столбец 33 содержит информацию о цветах транспортного средства и заголовок «Цвет транспортного средства». Мой MapReduce работает, однако результат может быть лучше. Столбец 33 содержит пустые значения и множество значений, которые написаны по-разному, но означают одно и то же. Пример: WH и White, BK BLACK BLA. Мой MapReducer считает их разными цветами. Что лучше всего объединить их в один ключ.

sys_stdin = open("Parking_Violations.csv", "r")

for line in sys_stdin:
    vehiclecolor = line.split(",")[33].strip()
    vehiclecolor = vehiclecolor.strip("Vehicle Color")

     if vehiclecolor:
        issuecolor = str(vehiclecolor)
        print("%s\t%s" % (issuecolor, 1))



dict_color_count = {}

for line in sys_stdin:
    line = line.strip()
    color, num = line.split('\t')
    try:
        num = int(num)
        dict_color_count[color] = dict_color_count.get(color, 0) + num

    except ValueError:
        pass

sorted_dict_color_count = sorted(dict_color_count.items(), key=itemgetter(1), reverse=True)
for color, count in sorted_dict_color_count:
    print('%s\t%s') % (color, count)
MY Result after MapReduce
BLK 35
WH 21
WHITE 20
BK 16
GRAY 14
WHT 8
BLACK 6
BLA 1

1 Ответ

0 голосов
/ 23 марта 2020

Я думаю, что подход, который вы могли бы использовать, состоит в том, чтобы добавить словарь со всеми вариантами ваших цветов и заменить их перед подсчетом. Например:


# Dictionary with all the colors that you have identified so far
color_dict = {
    "BLK":["BLK","BLACK","BLA"],
    "WHT":["WHITE","WHT","WHIT"],
}

for line in sys_stdin:
    vehiclecolor = line.split(",")[33].strip()
    vehiclecolor = vehiclecolor.strip("Vehicle Color")

     if vehiclecolor:
        testcolor = str(vehiclecolor).upper()
        issuecolor = testcolor
        for k,v in color_dict.items()
            if testcolor in v:
                issuecolor = k
        print("%s\t%s" % (issuecolor, 1))

В этом смысле вы сможете заменить и улучшить свой счетчик цветов уже известными вам результатами.

Дайте мне знать, если это поможет! : D

...