преобразования данных Pyspark python - PullRequest
0 голосов
/ 15 апреля 2020

как написать оператор python Python Функции?

Я хочу изменить данные (миллион записей) l = 0, m = 1, h = 2, c = 3, потому что я найду среднее позже. Я использую «Приоритет заказа» в качестве идентификатора, но строка не может reduceByKey.

Мои данные выглядят следующим образом:

+--------------+------------+
|Order Priority|  Units Sold|
+--------------+------------+
|M             |1593        | 
|M             |4611        |
|C             |7676        | 
|H             |4790        | 
|L             |3973        |

L = Низкая, M = Средняя, ​​H = Высокая , C = Критическое

Это мой код.py:

def parseLine(line):
    fields = line.split(',')
    priority = (fields[0])
    sold = float(fields[1])
    return (priority, sold)


lines = sc.textFile("file:///SparkCourse/project/1MillSalesRecords.csv", 4)
rdd = lines.map(parseLine)

print(rdd.take(2))

Результат:

[('M', 1593.0), ('M', 4611.0)]

1 Ответ

0 голосов
/ 15 апреля 2020

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

Не стесняйтесь также объединить эту функцию с первой картой (анализатором)

def cleanLine(line):
    #Get the character index 
    letter_index = 'LMHC'.find(line[0])
    return (letter_index , line[1])

cleanedLine = rdd.map(cleanLine)
print(cleanedLine.take(2))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...