Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.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
Apache storm 在ApacheStorm中是否可以将文件从Spout传递到Bolt? public类MySpout实现IRichSpout{ 私有列表文件名;//在此处输入代码 public void nextTuple(){ File File=新文件(“D:/small progs/tika_document_type_detection.pdf”); 文件名。添加(文件); emit(新值(文件名)); } } 插销 公共类MyBolt实现IRichBolt{ 公共void执行(元组){ FileInputStream=新的FileInputStream(tuple.getValues(0)); //我可以使用这个流obj来解析这个文件吗(使用apachetika) } }_Apache Storm - Fatal编程技术网

Apache storm 在ApacheStorm中是否可以将文件从Spout传递到Bolt? public类MySpout实现IRichSpout{ 私有列表文件名;//在此处输入代码 public void nextTuple(){ File File=新文件(“D:/small progs/tika_document_type_detection.pdf”); 文件名。添加(文件); emit(新值(文件名)); } } 插销 公共类MyBolt实现IRichBolt{ 公共void执行(元组){ FileInputStream=新的FileInputStream(tuple.getValues(0)); //我可以使用这个流obj来解析这个文件吗(使用apachetika) } }

Apache storm 在ApacheStorm中是否可以将文件从Spout传递到Bolt? public类MySpout实现IRichSpout{ 私有列表文件名;//在此处输入代码 public void nextTuple(){ File File=新文件(“D:/small progs/tika_document_type_detection.pdf”); 文件名。添加(文件); emit(新值(文件名)); } } 插销 公共类MyBolt实现IRichBolt{ 公共void执行(元组){ FileInputStream=新的FileInputStream(tuple.getValues(0)); //我可以使用这个流obj来解析这个文件吗(使用apachetika) } },apache-storm,Apache Storm,在这里,我无法将文件对象从喷口传递到螺栓。我是不是遗漏了什么?首先,我的问题是,我们可以使用以下方法将物体从喷口传递到螺栓: SpoutToutCollector collect.emit(文件名) 这里fileName是包含文件对象的对象列表 您的代码不起作用,因为您的喷口发出一个列表,其中包含文件对象,这些对象被序列化并发送到螺栓。因此,螺栓可以接收如下文件对象列表: public void execute(元组){ 列表文件=(列表)tuple.getValue(0); } 但我想,这

在这里,我无法将文件对象从喷口传递到螺栓。我是不是遗漏了什么?首先,我的问题是,我们可以使用以下方法将物体从喷口传递到螺栓:

SpoutToutCollector collect.emit(文件名)

这里fileName是包含文件对象的对象列表

您的代码不起作用,因为您的喷口发出一个
列表,其中包含
文件
对象,这些对象被序列化并发送到螺栓。因此,螺栓可以接收如下
文件
对象列表:

public void execute(元组){
列表文件=(列表)tuple.getValue(0);
}
但我想,这不是你想要的

我猜你想把文件的内容一个字节一个字节地从Spout发送到Bolt。为此,您需要在
Spout.nextTuple()
中打开文件,逐字节读取it并通过emit发出单个字节:

FileInputStream=null;
public void nextTuple(){
if(流==null){
流=新文件输入流(新文件(“…”);
}
emit(新值(新字节(stream.read()));
}
当然,bolt现在每个元组接收一个字节:

public void execute(元组){
字节b=tuple.getByte(0);
}

谢谢您的解决方案,但我在这里尝试的是需要从spout发送多个文件,每个螺栓都应该接收该文件并提取内容。那么我的逐字节建议有什么问题?是否希望每个文件都有一个元组?如果是,请使用字节数组或字节数组列表(如果一个太小而无法容纳)完整的内容。或者你能更详细地说明你所说的“发送多个文件”是什么意思吗?我对你的建议没有任何问题,但有一些疑问,我的要求是spout将从数据库中获取多个文件(比如1000个文件),spout应该向bolt发送,bolt将收集文件并像这样解析文件(使用Apache Tika提取文件的内容和元数据)现在我的问题是,如果我把字节一个字节地发送给这个,我能解析它吗?如果你只需要一个输入流,你可以简单地从字节数组中读取,也就是说,只要文件流中有一个新字节,就把字节缓冲到数组中,如果文件完成了,就把字节数组处理到输入流:
InputStream stream=newbytearrayinputStream(字节[]);
Girish,为什么要传递文件。看起来你想在Storm之上建立一个工作队列。这会有问题。你不应该将文件内容传递给Bolt,而应该让工作人员可以独立地签出对数据的引用和处理文件。传递文件的限制是工作堆的大小,这会导致中断nd 0MQ配置。不确定您将如何在拓扑内处理重传。