gpt4 book ai didi

scala - ProcessLogger,仅收集错误

转载 作者:行者123 更新时间:2023-12-03 03:49:33 29 4
gpt4 key购买 nike

我目前在 Linux 环境中使用 Scala 编写脚本。我将其用作 Hive 中的 ETL 流程。使用 ProcessLogger 类时,我不仅可以获得 stderr。不知道为什么?这是一个问题,因为当您在 Hive 中执行查询时,标准输出非常巨大。我几乎总是内存不足。

如果我编写以下代码(类似于 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

如果查询确实失败或抛出异常,会发生什么,StringBuilder 得到错误,这是完美的,但如果查询有效,它仍然会将输出发送到StringBuilder err 这使得我的脚本内存不足。

我不确定如何处理ProcessLogger以仅获取错误,或者我是否应该对记录器使用不同的管道运算符以排除输出并仅保留错误。

我确实深入研究了 Scala Api 来尝试了解如何做到这一点,但有时我仍然对如何阅读 API 感到困惑。这是第一次在 Scala Daily 中编码。

最佳答案

这个怎么样?

val logger = ProcessLogger(_ => () , err append _ )

它丢弃来自 stdout 的所有内容,并附加来自 stderr 的内容。您稍后尝试使用单个参数的描述如下:

Creates a scala.sys.process.ProcessLogger that sends all output, standard and error, to the passed function.

这意味着它将获得所有内容:stdout 和 stderr 在一起。

关于scala - ProcessLogger,仅收集错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19169409/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com