使用clojure中的Riemann转换浮点中的字符串

使用clojure中的Riemann转换浮点中的字符串,clojure,type-conversion,riemann,Clojure,Type Conversion,Riemann,我正在用黎曼处理流,所有字段都是字符串。但是,我想对一些字段执行一些数字比较。因此,我尝试将它们转换为float 假设我的流是这样的: #riemann.codec.Event{:host "myHost", :service nil, :state nil, :description "my description", :pred_score "0.156"} 我试图用如下内容修改riemann.conf文件: (streams (with :new_field (read-string

我正在用黎曼处理流,所有字段都是字符串。但是,我想对一些字段执行一些数字比较。因此,我尝试将它们转换为float

假设我的流是这样的:

#riemann.codec.Event{:host "myHost", :service nil, :state nil, :description "my description", :pred_score "0.156"}
我试图用如下内容修改
riemann.conf
文件:

(streams
 (with :new_field (read-string :pred_score))
 prn)
但是我犯了一些错误,我觉得这不是正确的方法。我最近读了一些东西,让我觉得我应该使用
smap
adjust
,但我不确定

顺便说一下,我对clojure绝对不熟悉。(事实上,我是和黎曼一起发现的)

你知道如何解决这个问题吗

提前感谢,


Robin。

我不知道riemann部分,但在普通clojure中,您可以使用Java互操作或。使用Java互操作,您可以执行以下操作:

> (def x {:host "myHost", :service nil, :state nil, :description "my description", :pred_score "0.156"} )
> (Double/parseDouble (:pred_score x))
0.156
“tupelo.parse”命名空间将其包装在普通clojure函数中,并添加了指定默认值以在值格式错误时返回(而不是引发异常)的功能:


我不知道riemann部分,但在普通clojure中,您可以使用Java互操作或。使用Java互操作,您可以执行以下操作:

> (def x {:host "myHost", :service nil, :state nil, :description "my description", :pred_score "0.156"} )
> (Double/parseDouble (:pred_score x))
0.156
“tupelo.parse”命名空间将其包装在普通clojure函数中,并添加了指定默认值以在值格式错误时返回(而不是引发异常)的功能:


您应该这样做。非常感谢您的回答,但是我仍然得到一个错误:
clojure.lang.Compiler$CompilerException:java.lang.NullPointerException
以下是我的语法:
(streams(if(>(Double/parseDouble(:pred_score event))0.5)prn)
我是否对clojure语法犯了错误,或者是因为我搞砸了某个黎曼配置导致的错误?可能是像
事件
未定义(即
nil
)这样简单的事情吗?您需要粘贴整个代码,以便我们看到这样的问题。请尝试键入
(println“event=”event)
您应该这样做。非常感谢您的回答,但是我仍然收到一个错误:
clojure.lang.Compiler$CompilerException:java.lang.NullPointerException
以下是我的语法:
(流(if(>(Double/parseDouble(:pred_score event))0.5)prn))
我是否在clojure语法上犯了错误,或者是因为我弄乱了某个Riemann配置而导致的错误?可能是像
事件
未定义(即
nil
)这样简单的错误吗?您需要粘贴整个代码,以便我们看到这样的问题。尝试键入
(println“event=”event)