Преобразовать строку в плавающем с Риманом в ближайшем будущем
Я обрабатываю потоки в Римане, и все поля являются строками. Однако я хотел бы провести некоторые числовые сравнения в некоторых областях. Поэтому я попытался конвертировать их в 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, кстати. (На самом деле я обнаружил это с Риманом).
У вас есть идеи о том, как решить проблему?
Заранее спасибо,
Робин.
1 ответ
Я не знаю о части riemann, но в простом замыкании вы могли бы использовать либо взаимодействие с Java, либо библиотеку Tupelo. Используя взаимодействие с 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