我已经从那个超链接ml-100k.zip下载了 movielens 数据集(它是一个电影和用户信息数据集,它在旧的数据集选项卡中)并且我编写了如下简单的 MapReduce 代码;
from mrjob.job import MrJob
class MoviesByUserCounter(MRJob):
def mapper(self , key ,line):
(userID,movieID,rating,timestamp)=line.split('\t')
yield userID,movieID
def reducer(self , user , movies):
numMovies=0
for movie in movies:
numMovies=numMovies+1
yield user,numMovies
if __name__=='__main__':
MoviesByUserCounter.run()
我使用 python 3.5.3 版本和 PyCharm 社区版作为 python ide。
我在命令行上试过
python my_code.py
但它并没有像我预期的那样工作,实际上它有效,但无论如何它都没有响应。它已经运行了一段时间,实际上它仍在运行。它只在命令行上写:
Running step 1 of 1...
reading from STDIN
我怎么能在命令行上成功地在我的python程序代码中提供数据(u.data:它是ml-100k.zip中的数据文件)?如果有任何其他解决方案,它也会很棒。
提前致谢。
如果我没记错的话,您想将数据作为命令行参数提供。
您可能希望使用sys.argv
. 除此之外,看看 CLI(命令行界面)库。
例子:
import sys
def main(arg1, arg2, *kwargs)
#do something
if __name__ == "__main__":
#there are not enough args
if len(sys.argv) < 3:
raise SyntaxError("Too few arguments.")
if len(sys.argv) != 3:
# There are keyword arguments
main(sys.argv[1], sys.argv[2], *sys.argv[3:])
else:
# no keyword args.
main(sys.argv[1], sys.argv[2])
通过这种方式,您可以为表单中的前两个和关键字参数传递位置相关的参数,如普通的python位置参数a=1
。
使用示例:
将数据文件作为第一个参数传递,将参数作为第二个参数传递
python my_code.py data.zip 0.1
如果您将使用多个命令行参数,您将需要花时间使用 CLI 库,以便它们不再依赖于位置。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句