gpt4 book ai didi

python - 控制 python 输出到控制台

转载 作者:可可西里 更新时间:2023-11-01 16:38:35 27 4
gpt4 key购买 nike

我正在使用 Hadoop/MapReduce 构建电影推荐。
现在我只使用 python 来实现 MapReduce 过程。

所以我基本上做的是分别运行每个映射器和缩减器,并使用从映射器到缩减器的控制台输出。

我遇到的问题是 python 在终端中将值输出为字符串,因此如果我使用数字,数字将打印为字符串,这使得简化过程变得困难,因为它的转换增加了更多在服务器上加载。

那么我该如何解决这个问题,我希望使用纯 python 来实现它,而不使用第 3 方库。

import sys

def mapper():
'''
From Mapper1 : we need only UserID , (MovieID , rating)
as output.
'''

#* First mapper

# Read input line
for line in sys.stdin:
# Strip whitespace and delimiter - ','
print line
data = line.strip().split(',')

if len(data) == 4:
# Using array to print out values
# Direct printing , makes python interpret
# values with comma in between as tuples
# tempout = []
userid , movieid , rating , timestamp = data
# tempout.append(userid)
# tempout.append((movieid , float(rating)))
# print tempout

#
print "{0},({1},{2})".format(userid , movieid , rating)

这是 reducer 打印语句:

def reducer():

oldKey = None
rating_arr = []

for line in sys.stdin:
# So we'll recieve user, (movie,rating)
# We need to group the tuples for unique users
# we'll append the tuples to an array
# Given that we have two data points , we'll split the
# data at only first occurance of ','
# This splits the string only at first comma

data = line.strip().split(',',1)
# print len(data) , data
# check for 2 data values
if len(data) != 2:
continue

x , y = data

if oldKey and oldKey != x:

print "{0},{1}".format(oldKey , rating_arr)
oldKey = x
rating_arr = []
oldKey = x
rating_arr.append(y)
# print rating_arr
if oldKey != None:
print "{0},{1}".format(oldKey , rating_arr)

`

输入是:

671,(4973,4.5)\n671,(4993,5.0)\n670,(4995,4.0)

输出是:

671,['(4973,4.5)', '(4993,5.0)']
670,['(4995,4.0)']

我需要原样的元组,没有字符串。

最佳答案

事实是,数据是一个字符串,然后您将 y 拆分并分配给它,它仍然是一个字符串

如果你想要元组的原始值,作为数字,你需要解析它们。

ast.literal_eval 可以提供帮助。

例如,

In [1]: line = """671,(4973,4.5)"""

In [2]: data = line.strip().split(',',1)

In [3]: data
Out[3]: ['671', '(4973,4.5)']

In [4]: x , y = data

In [5]: type(y)
Out[5]: str

In [6]: import ast

In [7]: y = ast.literal_eval(y)

In [8]: y
Out[8]: (4973, 4.5)

In [9]: type(y)
Out[9]: tuple

In [10]: type(y[0])
Out[10]: int

现在,如果您想切换到 PySpark,您可以更好地控制变量/对象类型,而不是使用 Hadoop Streaming 的所有字符串

关于python - 控制 python 输出到控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46506660/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com