Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PythonHDFS蛇咬:方法仅适用于打印_Python_Hadoop_Snakebite - Fatal编程技术网

PythonHDFS蛇咬:方法仅适用于打印

PythonHDFS蛇咬:方法仅适用于打印,python,hadoop,snakebite,Python,Hadoop,Snakebite,我用的是毒蛇咬伤的客户 当我试图在hdfs中创建目录或移动文件时,我注意到一种奇怪的行为。这是我的密码。它所做的一切就是将源目录的内容移动到目标目录。最后,显示目标目录的内容 def purge_pending(self,source_dir,dest_dir): if(self.hdfs_serpent.test(path=self.root_dir+"/"+source_dir, exists=True, directory=True)): pri

我用的是毒蛇咬伤的客户

当我试图在hdfs中创建目录或移动文件时,我注意到一种奇怪的行为。这是我的密码。它所做的一切就是将源目录的内容移动到目标目录。最后,显示目标目录的内容

def purge_pending(self,source_dir,dest_dir):

        if(self.hdfs_serpent.test(path=self.root_dir+"/"+source_dir, exists=True, directory=True)):
            print "Source exists ",self.root_dir+source_dir
            for x in self.hdfs_serpent.ls([self.root_dir+source_dir]):
                print x['path']
        else:
            print "Source does not exist ",self.root_dir+"/"+source_dir
            return
        if(self.hdfs_serpent.test(path=self.root_dir+"/"+dest_dir, exists=True, directory=True)):
            print "Destination exists ",self.root_dir+dest_dir
        else:
            print "Destination does not exist ",self.root_dir+dest_dir
            print "Will be created"
            for y in self.hdfs_serpent.mkdir([self.root_dir+dest_dir],create_parent=True):
                print y

        for src in self.hdfs_serpent.ls([self.root_dir+source_dir]):
            print src['path'].split("/")[-1]
            for y in self.hdfs_serpent.rename([src['path']],self.root_dir+dest_dir+"/"+src['path'].split("/")[-1]):
                print y


        for x in self.hdfs_serpent.ls([self.root_dir+dest_dir]):
            print x['path']
这是当目标不存在时的一个示例输出

Source exists  /root/source
/root/source/208560.json
/root/source/208571.json
/root/source/208574.json
/root/source/208581.json
/root/source/208707.json
Destination does not exist /root/dest
Will be created
{'path':'/research/dest/'}
208560.json
{'path':'/research/dest/208560.json'}
208571.json
{'path':'/research/dest/208571.json'}
208574.json
{'path':'/research/dest/208574.json'}
208581.json
{'path':'/research/dest/208581.json'}
208707.json
{'path':'/research/dest/208707.json'}
奇怪的是,我必须把那些打印出来的语句放进去,否则什么都不起作用。所以

self.hdfs_serpent.mkdir([self.root_dir+dest_dir],create_parent=True)
不起作用,但是

for y in self.hdfs_serpent.mkdir([self.root_dir+dest_dir],create_parent=True):
                print y
是的!!!同样适用于

self.hdfs_serpent.rename([src['path']],self.root_dir+dest_dir+"/"+src['path'].split("/")[-1])
因为上面的方法不起作用,但下面的方法起作用

for y in self.hdfs_serpent.rename([src['path']],self.root_dir+dest_dir+"/"+src['path'].split("/")[-1]):
                print y

这是虫子吗?我做错了什么吗?

这看起来是出于设计,因为这些方法返回的大多数对象都是生成器。因此,函数通常不会做任何事情,直到使用了
for
隐式使用的值。

谢谢,您知道他们将方法返回类型保留为生成器的任何特定原因吗?我不完全确定,但很可能是出于性能原因。生成器将仅在对其进行迭代时执行该操作。