创建决策树作为聚合函数而不嵌套RDD

时间:2015-11-20 17:00:41

标签: apache-spark decision-tree rdd apache-spark-mllib

我有一大堆行,其中包含非唯一ID和功能向量。我需要聚合每个ID的所有功能,并使用所有这些功能为每个ID生成决策树。

我尝试过使用RDD或数据帧的各种解决方法,但我总是走到尽头。只要我知道,不允许嵌套RDD,所以我无法获得必要的RDD [LabeledPoint]来训练地图函数中的树。

具有类似

的结构
idFeatures: RDD[(String, Iterable[LabeledPoint])]

我想做的是与此类似的东西(因为嵌套RDD而返回NullPointerException):

  val trees = idFeatures.groupByKey().mapValues(features => {
     DecisionTree.trainRegressor(sc.parallelize(features.to[Seq]),  Map[Int, Int](), impurity, maxDepth, maxBins)
  });

有没有办法在不重复遍历不同id的集合的情况下逐个生成树(不是根据id集的大小选择)?

1 个答案:

答案 0 :(得分:0)

使用RDD。 treeAggregate

def treeAggregate[U: ClassTag](zeroValue: U)(
      seqOp: (U, T) => U,
      combOp: (U, U) => U

您可以将trainRegressor放入Sequential Op(第一个参数),然后将Combine Op(第二个参数)中的汇总动作放入