import com.hazelcast.client.HazelcastClient;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.core.IMap;
import com.hazelcast.spark.connector.HazelcastSparkContext;
import com.hazelcast.spark.connector.rdd.HazelcastJavaRDD;
import domain.User;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.DoubleFlatMapFunction;
import scala.Tuple2;
import java.util.Iterator;
import java.util.Random;
import static java.util.Collections.singletonList;
public class CreateRddFromHazelcast {
public static void main(String[] args) {
fillHazelcastMapWithUsers();
SparkConf conf = new SparkConf()
.setMaster("local[2]")
.setAppName("Create RDD From Hazelcast")
.set("hazelcast.server.addresses", "127.0.0.1:5701")
.set("spark.driver.host", "127.0.0.1");
JavaSparkContext sparkContext = new JavaSparkContext(conf);
HazelcastSparkContext hazelcastSparkContext = new HazelcastSparkContext(sparkContext);
HazelcastJavaRDD<String, User> usersRdd = hazelcastSparkContext.fromHazelcastMap("users");
Double averageAge = usersRdd.flatMapToDouble(
new DoubleFlatMapFunction<Tuple2<String, User>>() {
@Override
public Iterator<Double> call(Tuple2<String, User> entry)
throws Exception {
return singletonList((double) entry._2().getAge()).iterator();
}
}
).mean();
System.out.println("Average user age = " + averageAge);
}
private static void fillHazelcastMapWithUsers() {
Random random = new Random();
HazelcastInstance client = HazelcastClient.newHazelcastClient();
IMap<String, User> users = client.getMap("users");
for (int i = 0; i < 10; i++) {
String name = "user-" + i;
User user = new User(name, random.nextInt(80), random.nextInt(10000));
users.put(name, user);
}
client.getLifecycleService().shutdown();
}
}