我的映射器是:
import sys
for line in sys.stdin:
# split line into the four fields
fields = line.strip().split("t")
value = fields[2] #rating
key = fields[3] #timestamp in unix seconds
print(key, value, sep="t")
我的减速机是:
import sys
(last_key , count) = (None, 0)
for line in sys.stdin:
(key, value) = line.strip().split("t")
if (last_key and last_key !=key):
print(last_key, count, sep="t")
count=0
last_key = key
count += int(value)
print(last_key, count, sep="t")
我如何得到收视率的数量?映射器工作得很好。什么时候转换时间戳(这里是last_key)
输出应为(年-月t评级记录数)
如果你想减少(组)year-month
字符串,它需要是映射器的键,而不是有第二个精度。
之后,您只需要在reducer中计算该键的值的数量。(映射器的值可以只是1
,而不是实际值,如果你只需要计数额定值,那么减速机可以sum
值)
我建议使用mrjob
库而不是手动从sys.stdin
中读取,或者您可以在PySpark中重新编写代码并在更少的行中执行相同的操作。