2016-08-16 6 views
1

リーマンでストリームを処理していて、すべてのフィールドが文字列です。しかし、私はいくつかのフィールドでいくつかの数値比較を実行したいと思います。そこで私はフロートでそれらを変換しようとしました。フロート内の文字列をリーマンで変換する。

のは、私のストリームがそのようなものであるとしましょう:私はこのようなものでriemann.confファイルを変更しようとした

#riemann.codec.Event{:host "myHost", :service nil, :state nil, :description "my description", :pred_score "0.156"} 

(streams 
(with :new_field (read-string :pred_score)) 
prn) 

は、しかし、私はいくつかのエラーを持って、私はこのように感じますこれを行う正しい方法ではありません。私は最近、私が smapまたは adjustを使用すべきだと思うようにいくつかのものを読んだが、わからない。

私はまったくの方法でクロージャに精通していません。 (実際に私はリーマンとそれを発見した)。

問題に対処する方法はありますか。

ありがとうございます。

Robin。

答えて

0

私はリーマンの部分については知らないが、平野のClojureには、Javaの相互運用やthe Tupelo libraryのいずれかを使用することができます。 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の関数内でこれをラップし、不正な値の場合に返すためにデフォルト値を指定する機能が追加されます代わりに)例外をスローする:

> (require '[tupelo.parse :as parse]) 
> (parse/parse-double (:pred_score x)) 
0.156 
> (parse/parse-double "123.4x6" :default 0) 
0 
+0

あなたは(https://meta.stackoverflow.com/questions/298734/is-it-acceptable-to [ライブラリの作者です免責条項を追加]すべきです-promote-my-own-library-as-a-real-answer#comment217878_298743)。あなたの答えのための –

+0

おかげで多くは、しかし、私はまだエラーを取得: 'clojure.lang.Compiler $ CompilerException:java.lang.NullPointerException' ここでは私の構文は次のとおりです。 '(ダブル(>(場合( ストリーム/ parseDouble(:pred_scoreイベント))0.5)PRN) ) ' 私はClojureの構文と間違って何かをしたか、それが原因私が台無しにいくつかのリーマンの設定に誤りであるでしたか? –

+0

'event'が定義されていない(つまり' nil')という単純なことがありますか?そのような問題を見るためには、コード全体を貼り付ける必要があります。単に '(println" event = "event")と入力してみてください。 –

関連する問題