在 tomcat服务器基于Web的应用程序中的本地模式中使用 apache spark 1.6 ,并且该计算机具有 64GB的RAM 和 16个核心。
Tomcat被分配了20GB的内存。初始化spark上下文时, spark驱动程序和执行程序都被分配了15GB的内存。
虽然数据库( MS SQL Server 2008 R2 )表包含550万条记录和200列。
问题:
问题#需要建议将性能提高到可接受的时间,我们预计整个工作完成或可能在10分钟左右?任何指导都将不胜感激。
执行spark mlib k-means的代码段
DataFrame dataFrame = sparkContextSQL.read().format("jdbc").options(options).load();
JavaRDD<Row> javaRDD = dataFrame.toJavaRDD();
JavaRDD<Vector> javaRddVector = javaRDD.map(new NumericFieldsToVector());
javaRddVector.cache();
// model configurations
int numberOfClusters = 5;
int numberOfIterations = 20;
KMeansModel kmeansModel = KMeans.train(javaRddVector.rdd(), numberOfClusters, numberOfIterations);
JavaRDD<Row> rowsWithClusterPrediction = javaRDD.map(new FieldsWithClusterNumber(kmeansModel));
javaRddVector.unpersist();
// ========== create new-schema
List<StructField> newFields = new ArrayList<>(Arrays.asList(dataFrame.schema().fields()));
newFields.add(DataTypes.createStructField("cluster_number", DataTypes.StringType, true));
StructType newSchema = DataTypes.createStructType(newFields);
DataFrame newDataFrame = sparkContextSQL.createDataFrame(rowsWithClusterPrediction, newSchema);
// Save newDataFrame into Database Table
String tableName = "kmeans" + UUID.randomUUID().toString().replaceAll("-", "");
newDataFrame.write().jdbc(fullUrl, tableName, new Properties());