Scala ProcessLogger,仅收集错误
我目前使用Scala在Linux环境中编写脚本。我在Hive中将其用作ETL过程。 当使用ProcessLogger类时,我不能只获取stderr。不知道为什么? 这是一个问题,因为当您在配置单元中执行查询时,标准输出是巨大的。我几乎总是记忆犹新 如果我编写的代码与Scaladoc或StackOverflow中的某些示例中指定的代码类似,那么只要我的查询返回少量行,它就可以正常工作。我得到了输出和错误Scala ProcessLogger,仅收集错误,scala,Scala,我目前使用Scala在Linux环境中编写脚本。我在Hive中将其用作ETL过程。 当使用ProcessLogger类时,我不能只获取stderr。不知道为什么? 这是一个问题,因为当您在配置单元中执行查询时,标准输出是巨大的。我几乎总是记忆犹新 如果我编写的代码与Scaladoc或StackOverflow中的某些示例中指定的代码类似,那么只要我的查询返回少量行,它就可以正常工作。我得到了输出和错误 val err = new StringBuilder val out = new Strin
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。今天早上刚刚试过,看起来它正在工作。我尝试了一个返回数百万行的查询,但没有崩溃。到目前为止很好,谢谢你的帮助。