AWS的Python和boto包:在集群上分发文件

2024-04-30 06:08:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在一个带有Boto包的EMR实例上测试Python脚本。在

该脚本读取名为fileC的文件的每一行,将它们的内容与fileAC中的行的内容进行比较,并将过滤后的行写入单独的文件中。当我比较两个大文件时,我用第三个名为fileA的文件创建了另一个中间过滤器,以获得时间。在

问题如下:在本地机器上测试期间,脚本运行良好,从fileC中过滤出200多行。但是,一旦我用Boto包在AWS上试用,脚本根本不会过滤fileC(p=0,没有显示“found”,行数与fileC相同)。似乎这两个文件fileA和fileAC没有被读取。对于boto,我在函数StreamingStep(“为了将2个文件(fileA和fileAC)分发到每个集群,我在函数”StreamingStep“中使用了“缓存”功能。以前也适用于其他剧本,但现在不行了。有什么想法吗?在

脚本如下:

sys.path.append(os.path.dirname(__file__))

def main(argv):

filenameAC = 'activities.log'
filenameA = 'activitiesCookieCountry.log'

fileC = fileinput.FileInput(sys.argv[1:])
fileA = open(filenameA,'r')
fileAC = open(filenameAC,'r')
fileA = [line.rstrip('\n') for line in fileA]
Alines = set(fileA)
for lineC in fileC:

fieldC = lineC.split('#')
fieldComp = fieldC[0]+'#'+fieldC[2] 
p = 0
if fieldComp in Alines:
fileAC.seek(0)
for lineAC in fileAC:
fieldAC = lineAC.split('#')
if (fieldAC[0] == fieldC[0]) and (fieldAC[2] == fieldC[2]) and (fieldAC[1] <             fieldC[1]):
p = 1
print('found')
if p == 0:
sys.stdout.write(lineC)

if __name__ == "__main__":
main(sys.argv)

下面是在EMR中运行脚本的脚本:

^{pr2}$

我怀疑调用的两个文件不应该这样定义:

^{3}$

但我真的不知道还有什么


Tags: 文件in脚本forifmainsysboto