Esempio n. 1
0
    def init(self, init_req):
        response = udf_pb2.Response()
        succ = True
        msg = ''

        for opt in init_req.options:
            if opt.name == 'predict':
                self._predict = opt.values[0].intValue
                self._model._predict = self._predict
            if opt.name == 'field':
                self._field = opt.values[0].stringValue
            if opt.name == 'type':
                self._field_type = opt.values[0].stringValue
            if opt.name == 'mae':
                self._mae = opt.values[0].boolValue
            if opt.name == 'rmse':
                self._rmse = opt.values[0].boolValue

        if self._predict < 1:
            succ = False
            msg += ' must supply number of values to be predicted > 0'
        if self._field == '':
            succ = False
            msg += ' must specify the field to use'
        if self._field_type not in FIELD_TYPES:
            succ = False
            msg += ' field type must be one of {}'.format(FIELD_TYPES)

        response.init.success = succ
        response.init.error = msg[1:]

        return response
Esempio n. 2
0
    def end_batch(self, end_req):
        self._model.auto()
        forecast = self._model.predict()

        self._begin_response.begin.size = self._predict
        self._agent.write_response(self._begin_response)

        response = udf_pb2.Response()
        response.point.CopyFrom(self._point)
        for i in range(0, self._predict):
            response.point.time = forecast.index[i].value
            if self._field_type is 'int':
                response.point.fieldsInt[self._field] = forecast[i]
            else:
                response.point.fieldsDouble[self._field] = forecast[i]
            self._agent.write_response(response)

        response.end.CopyFrom(end_req)
        self._agent.write_response(response)

        if self._mae:
            mae = self._model.mae()
            logger.info("MAE for fitted values: {}".format(mae))

        if self._rmse:
            rmse = self._model.rmse()
            logger.info("RMSE for fitted values: {}".format(rmse))
Esempio n. 3
0
    def info(self):
        response = udf_pb2.Response()
        response.info.wants = udf_pb2.BATCH
        response.info.provides = udf_pb2.BATCH

        response.info.options['predict'].valueTypes.append(udf_pb2.INT)
        response.info.options['field'].valueTypes.append(udf_pb2.STRING)
        response.info.options['type'].valueTypes.append(udf_pb2.STRING)
        response.info.options['rmse'].valueTypes.append(udf_pb2.BOOL)
        response.info.options['mae'].valueTypes.append(udf_pb2.BOOL)

        return response
Esempio n. 4
0
 def restore(self, restore_req):
     response = udf_pb2.Response()
     response.restore.success = False
     response.restore.error = 'not implemented'
     return response
Esempio n. 5
0
 def snapshot(self):
     response = udf_pb2.Response()
     response.snapshot.snapshot = ''
     return response
Esempio n. 6
0
    def begin_batch(self, begin_req):
        self._model.drop()

        response = udf_pb2.Response()
        response.begin.CopyFrom(begin_req)
        self._begin_response = response