Рассмотрим этот набор данных рейтинга фильмов (userId, movieId, rating, timestamp)
1,1,4.0,964982703
1,3,4.0,964981247
1,223,3.0,964980985
1,231,5.0,964981179
1,1226,5.0,964983618
6,95,4.0,845553559
6,100,3.0,845555151
6,102,1.0,845555436
6,104,4.0,845554349
6,105,3.0,845553757
6,110,5.0,845553283
6,112,4.0,845553994
610,152081,4.0,1493846503
610,152372,3.5,1493848841
610,155064,3.5,1493848456
610,156371,5.0,1479542831
610,156726,4.5,1493848444
610,157296,4.0,1493846563
610,158238,5.0,1479545219
610,158721,3.5,1479542491
610,160080,3.0,1493848031
610,160341,2.5,1479545749
610,160527,4.5,1479544998
m = sc.textFile('movies/ratings_s.csv')
Для гистограммы рейтинга я понимаю, что мы можем сделать следующее
scores = m.map(lambda line : line.split(',')[2])
sorted(scores.countByValue().items())
[(«1,0», 1), («2,5», 1), («3,0», 4), («3,5», 3), («4,0», 7), («4,5»,
2), ('5,0', 5)]
Я попробовал flatMap просто, чтобы понять разницу:
scores = m.flatMap(lambda line : line.split(',')[2])
sorted(scores.countByValue().items())
Результат, который у меня был
[('.', 23), ('0', 17), ('1', 1), ('2', 1), ('3', 7), ('4', 9 ), ('5',
11)]
Не могли бы вы помочь объяснить поведение flatMap здесь:
Какую логику выполняет flatMap? Что значит "сгладить", чтобы создать такой результат?
Почему это раздевается "." отдельно и оставить только неотъемлемую часть? Мы не просим расстаться с "."
Как вернуть десятичные результаты с результатом .5?