Преобразовать строку в плавающем с Риманом в ближайшем будущем

Я обрабатываю потоки в Римане, и все поля являются строками. Однако я хотел бы провести некоторые числовые сравнения в некоторых областях. Поэтому я попытался конвертировать их в 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
Другие вопросы по тегам