我有这个示例R
刮板脚本(我不能使用实际的网站):
#!/usr/bin/Rscript
library(RCurl)
library(httr)
library(rvest)
library(lubridate)
library(stringi)
new_files <- Map(function(ln, y, bn) {
fun1 <- html_session(URLencode(
paste0("https://example.com", ln)),
config(ssl_verifypeer = FALSE))
if(y == Sys.Date()) {writeBin(fun1$response$content, bn)}
else ("He's dead, Jim")
return(fun1$response$content)
}, links, dates, names)
我正在通过Apache NiFi(ExecuteProcessor
处理器)在docker容器中运行此脚本。但是,当我将其设置为运行时,我会不断收到此错误:
Process execution failed due to java.io.IOException: Stream closed: java.io.IOException: Stream closed
java.io.IOException: Stream closed
at java.io.BufferedInputStream.getBufIfOpen(BufferedInputStream.java:170)
at java.io.BufferedInputStream.read(BufferedInputStream.java:336)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:286)
at java.io.BufferedInputStream.read(BufferedInputStream.java:345)
at java.io.FilterInputStream.read(FilterInputStream.java:107)
at org.apache.nifi.processors.standard.ExecuteProcess$4.call(ExecuteProcess.java:367)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
在关闭this answer on closing streams之前,我正在阅读。当脚本在我的本地计算机上/在RStudio中运行正常时,我不知道为什么这会引发封闭的异常错误。
在docker容器中执行后立即混乱。与Map
函数中的if / else语句有关?我不知道-或与加载lubridate
包有关。
答案 0 :(得分:1)
正如已经提到的几个人一样,您正在尝试做一些复杂的事情,需要在多个领域进行故障排除。我将分享一些解决此问题的步骤,但是请考虑以下几点:
您正在使用相当复杂的解决方案来解决可能是一个简单的问题。您可以通过“我要抓取网站”或“我要运行脚本”这些方式之一来考虑问题吗?
在这种情况下,有个好消息,NiFi可以使用ExecuteScript处理器轻松处理脚本,它目前支持以下语言:
根据我的个人喜好,我会选择python,您将轻松找到许多有关如何抓取网站的示例。
如果以上操作还不够,请检查以下步骤:
ls
ls
要深入研究所有可能性会有点太多,但是请进行检查并希望答案是明确的,或者至少可以将重点放在故障排除上。