我试图使用Spark并行化一个集合,但文档中的示例似乎不起作用:
List<Integer> data = Arrays.asList(1, 2, 3, 4, 5);JavaRDD<Integer> distData = sc.parallelize(data);
我正在从每条记录中创建一个LabeledPoint
列表,每条记录包含数据点(double[]
)和一个标签(默认为真/假)。
public List<LabeledPoint> createLabeledPoints(List<ESRecord> records) { List<LabeledPoint> points = new ArrayList<>(); for (ESRecord rec : records) { points.add(new LabeledPoint( rec.defaulted ? 1.0 : 0.0, Vectors.dense(rec.toDataPoints()))); } return points;}public void test(List<ESRecord> records) { SparkConf conf = new SparkConf().setAppName("SVM Classifier Example"); SparkContext sc = new SparkContext(conf); List<LabeledPoint> points = createLabeledPoints(records); JavaRDD<LabeledPoint> data = sc.parallelize(points); ... }
parallelize函数的签名不再只接受一个参数,在spark-mllib_2.11 v1.3.0中,它看起来是这样的:sc.parallelize(seq, numSlices, evidence$1)
那么,有什么办法可以让它工作吗?
回答:
在Java中,你应该使用JavaSparkContext
。
https://spark.apache.org/docs/0.6.2/api/core/spark/api/java/JavaSparkContext.html