Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.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
Scala ProcessLogger,仅收集错误_Scala - Fatal编程技术网

Scala ProcessLogger,仅收集错误

Scala ProcessLogger,仅收集错误,scala,Scala,我目前使用Scala在Linux环境中编写脚本。我在Hive中将其用作ETL过程。 当使用ProcessLogger类时,我不能只获取stderr。不知道为什么? 这是一个问题,因为当您在配置单元中执行查询时,标准输出是巨大的。我几乎总是记忆犹新 如果我编写的代码与Scaladoc或StackOverflow中的某些示例中指定的代码类似,那么只要我的查询返回少量行,它就可以正常工作。我得到了输出和错误 val err = new StringBuilder val out = new Strin

我目前使用Scala在Linux环境中编写脚本。我在Hive中将其用作ETL过程。 当使用ProcessLogger类时,我不能只获取stderr。不知道为什么? 这是一个问题,因为当您在配置单元中执行查询时,标准输出是巨大的。我几乎总是记忆犹新

如果我编写的代码与Scaladoc或StackOverflow中的某些示例中指定的代码类似,那么只要我的查询返回少量行,它就可以正常工作。我得到了输出和错误

val err = new StringBuilder
val out = new StringBuilder
val logger = ProcessLogger(out append _ , err append _ )
val res =  Seq("hive","-e","show tables in ab_testing") ! logger
val err = new StringBuilder
val logger = ProcessLogger(err append _ )
val res =  Seq("hive","-e","select * from ab_testing.ab_searches") ! logger
在我的例子中,我只对错误感兴趣,而不关心输出。它返回数百万行,我的内存不足。在对文档或博客做了一些挖掘之后,似乎会说如果你这样做的话。您应该只接收错误

val err = new StringBuilder
val out = new StringBuilder
val logger = ProcessLogger(out append _ , err append _ )
val res =  Seq("hive","-e","show tables in ab_testing") ! logger
val err = new StringBuilder
val logger = ProcessLogger(err append _ )
val res =  Seq("hive","-e","select * from ab_testing.ab_searches") ! logger
如果查询确实触发或抛出异常,StringBuilder会得到错误,这是完美的,但如果查询有效,它仍会将输出发送到 StringBuilder错误,导致脚本内存不足

我不确定如何处理ProcessLogger以仅获取错误,或者是否应使用不同的管道操作符来排除输出并仅保留错误

val err = new StringBuilder
val out = new StringBuilder
val logger = ProcessLogger(out append _ , err append _ )
val res =  Seq("hive","-e","show tables in ab_testing") ! logger
val err = new StringBuilder
val logger = ProcessLogger(err append _ )
val res =  Seq("hive","-e","select * from ab_testing.ab_searches") ! logger
我确实深入研究了Scala Api,试图了解如何做到这一点,但有时我仍然对如何阅读Api的内容感到困惑。这是第一次使用Scala每日编码。

这个怎么样

val logger = ProcessLogger(_ => () , err append _ )
它丢弃stdout中的任何内容,并附加stderr中的内容。在尝试后一种方法时使用单个参数如下所述:

创建发送所有输出的scala.sys.process.ProcessLogger, 传递给传递函数的标准和错误


这意味着它将把所有的东西都放在一起:stdout和stderr。

今天早上刚刚试过,看起来它正在工作。我尝试了一个返回数百万行的查询,但没有崩溃。到目前为止很好,谢谢你的帮助。