Преобразование строки в двойную или плавающую проблему в потоковом процессоре WSO2 - PullRequest
0 голосов
/ 10 октября 2019

У меня есть файл CSV, который я хочу загрузить в потоковый процессор WS02 для имитации событий. У меня есть столбец с именем «Результат». Это строковый столбец в файле CSV.

В потоковом процессоре WSO2 я попытался преобразовать входящую строку результата в удвоенную или плавающую. Но это не работает. Я также пытался каким-то образом изменить файл CSV. Например, я попытался сделать его двойным или десятичным с опцией «форматировать ячейки» в Excel, но это не сработало.

Ниже приведен код, который я пробовал в WSO2. Это пример значения результата: 159,321 Максимальное количество цифр: 6. Максимум 3 цифры до и после запятой.

define stream ResultStream(Nr String, DateTime String, Result String);

@sink(type='log', prefix='LOGGER')
define stream OutputStream(Nr int, DateTime String, Result double);

@info(name='Query')
from ResultStream
select convert(Nr, 'int') as Nr, DateTime, convert(Result, 'double') as Result
insert into OutputStream;

Я получаю ошибку ниже:

java.lang.String cannot be cast to java.lang.Double. Hence, dropping event 'Event{timestamp=1570697706466, data=[18, 1-9-2010 08:06, 54,103], isExpired=false}' java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Double
        at org.wso2.siddhi.core.query.selector.attribute.aggregator.AvgAttributeAggregator$AvgAttributeAggregatorDouble.processAdd(AvgAttributeAggregator.java:162)
        at org.wso2.siddhi.core.query.selector.attribute.aggregator.AvgAttributeAggregator.processAdd(AvgAttributeAggregator.java:102)
        at org.wso2.siddhi.core.query.selector.attribute.aggregator.AttributeAggregator.process(AttributeAggregator.java:87)
        at org.wso2.siddhi.core.query.selector.attribute.processor.executor.AggregationAttributeExecutor.execute(AggregationAttributeExecutor.java:40)
        at org.wso2.siddhi.core.query.selector.attribute.processor.AttributeProcessor.process(AttributeProcessor.java:41)
        at org.wso2.siddhi.core.query.selector.QuerySelector.processNoGroupBy(QuerySelector.java:136)
        at org.wso2.siddhi.core.query.selector.QuerySelector.process(QuerySelector.java:94)
        at org.wso2.siddhi.core.query.processor.stream.window.LengthWindowProcessor.process(LengthWindowProcessor.java:137)
        at org.wso2.siddhi.core.query.processor.stream.window.WindowProcessor.processEventChunk(WindowProcessor.java:65)
        at org.wso2.siddhi.core.query.processor.stream.AbstractStreamProcessor.process(AbstractStreamProcessor.java:123)
        at org.wso2.siddhi.core.query.input.ProcessStreamReceiver.processAndClear(ProcessStreamReceiver.java:187)
        at org.wso2.siddhi.core.query.input.ProcessStreamReceiver.process(ProcessStreamReceiver.java:97)
        at org.wso2.siddhi.core.query.input.ProcessStreamReceiver.receive(ProcessStreamReceiver.java:133)
        at org.wso2.siddhi.core.stream.StreamJunction.sendEvent(StreamJunction.java:204)
        at org.wso2.siddhi.core.stream.StreamJunction$Publisher.send(StreamJunction.java:414)
        at org.wso2.siddhi.core.stream.input.InputDistributor.send(InputDistributor.java:34)
        at org.wso2.siddhi.core.stream.input.InputEntryValve.send(InputEntryValve.java:44)
        at org.wso2.siddhi.core.stream.input.InputHandler.send(InputHandler.java:73)
        at org.wso2.carbon.siddhi.editor.core.internal.DebuggerEventStreamService.pushEvent(DebuggerEventStreamService.java:70)
        at org.wso2.carbon.event.simulator.core.service.EventSimulator.eventSimulation(EventSimulator.java:320)
        at org.wso2.carbon.event.simulator.core.service.EventSimulator.run(EventSimulator.java:451)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)

1 Ответ

0 голосов
/ 10 октября 2019

Проблема, с которой вы столкнулись, связана с запятой в значении Result. Вам нужно удалить запятую, чтобы сделать ее действительным числом для преобразования.

Проверьте обновленное приложение Сиддхи ниже. Я использовал метод str: replaceAll для удаления ',' с пустой строкой.

define stream ResultStream(Nr String, DateTime String, Result String);

@sink(type='log', prefix='LOGGER')
define stream OutputStream(Nr int, DateTime String, Result double);

@info(name='Query')
from ResultStream
select convert(Nr, 'int') as Nr, DateTime, convert(str:replaceAll(Result,',',''), 'double') as Result
insert into OutputStream;
...