package skywriting.examples.kmeans;
import java.io.DataOutputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Random;
import com.asgow.ciel.executor.Ciel;
import com.asgow.ciel.references.Reference;
import com.asgow.ciel.references.WritableReference;
import com.asgow.ciel.tasks.FirstClassJavaTask;
public class KMeansDataGenerator implements FirstClassJavaTask {
private int numVectors;
private int numDimensions;
private int seed;
public KMeansDataGenerator(int numVectors, int numDimensions, int seed) {
this.numVectors = numVectors;
this.numDimensions = numDimensions;
this.seed = seed;
}
@Override
public Reference[] getDependencies() {
return new Reference[0];
}
@Override
public void invoke() throws Exception {
double minValue = -1000000.0;
double maxValue = 1000000.0;
WritableReference out = Ciel.RPC.getOutputFilename(0);
DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(out.open(), 1048576));
Random rand = new Random(this.seed);
for (int i = 0; i < this.numVectors; ++i) {
for (int j = 0; j < this.numDimensions; ++j) {
dos.writeDouble((rand.nextDouble() * (maxValue - minValue)) + minValue);
}
}
dos.close();
//Ciel.RPC.closeOutput(0);
}
@Override
public void setup() {
;
}
public static void main(String[] args) {
try {
int numVectors = Integer.parseInt(args[0]);
int numDimensions = Integer.parseInt(args[1]);
int seed = Integer.parseInt(args[2]);
Ciel.RPC = new DummyRPC(new OutputStream[] { new FileOutputStream(args[3]) });
new KMeansDataGenerator(numVectors, numDimensions, seed).invoke();
} catch (Exception e) {
e.printStackTrace();
System.exit(-1);
}
}
}