Example usage for org.apache.mahout.math.random ChineseRestaurant sample

List of usage examples for org.apache.mahout.math.random ChineseRestaurant sample

Introduction

In this page you can find the example usage for org.apache.mahout.math.random ChineseRestaurant sample.

Prototype

@Override
    public Integer sample() 

Source Link

Usage

From source file:com.mapr.franz.Traffic.java

License:Apache License

public static void main(String[] args) throws InterruptedException, IOException, ServiceException {
    Options options = parseOptions(args);
    log.warn("Options = {}", options.toString());

    double scale = Math.log(options.ratio) / 2;

    Client client = new Client(Collections.singleton(new PeerInfo(options.host, options.port)));

    History recorder = new History(1, 10, 30).logTicks();

    Random gen = RandomUtils.getRandom();
    ChineseRestaurant topicSampler = new ChineseRestaurant(options.alpha);
    Exponential interval = new Exponential(1, gen);
    double t = 0;
    long t0 = System.nanoTime();
    long messageId = 0;
    while (messageId < options.max) {
        double rate = options.peak * Math.exp(-scale * (Math.cos(2 * Math.PI * t / options.period) + 1));
        double dt = interval.nextDouble() / rate;
        t += dt;// w w  w  .j  a v  a 2s.  co m
        double now = (System.nanoTime() - t0) / 1e9;
        if (t > now + 0.01) {
            double millis = Math.floor((t - now) * 1000);
            double nanos = Math.rint((t - now) * 1e9 - millis * 1e6);
            Thread.sleep((long) millis, (int) nanos);
        }

        String topic = "topic-" + topicSampler.sample();
        String message = "m-" + (++messageId);
        client.sendMessage(topic, message);
        recorder.message(topic);
        log.debug("Sent {} / {}", topic, message);
        if ((messageId % 10000) == 0) {
            log.warn("Sent {} messages", messageId);
        }
    }
}