scala帮助需要了解AssociationRules的创建

时间:2016-11-07 15:01:35

标签: scala apache-spark

新手。我尝试从示例中学习Scala,我发现了一些创建AssociationRules source code here

的Spark代码
def run[Item: ClassTag](freqItemsets: RDD[FreqItemset[Item]]): RDD[Rule[Item]] = {
// For candidate rule X => Y, generate (X, (Y, freq(X union Y)))
val candidates = freqItemsets.flatMap { itemset =>
  val items = itemset.items
  items.flatMap { item =>
    items.partition(_ == item) match {
      case (consequent, antecedent) if !antecedent.isEmpty =>
        Some((antecedent.toSeq, (consequent.toSeq, itemset.freq)))
      case _ => None
    }
  }
}

我尝试低估了run函数的工作原理以及算法在case中如何理解antecedent为X且consequent为Y.如何划分项目?

另一个问题:join函数如何工作(如下)? freqAntecedentx.freq吗? freqUnion如何在map中展示?

candidates.join(freqItemsets.map(x => (x.items.toSeq, x.freq)))
  .map { case (antecendent, ((consequent, freqUnion), freqAntecedent)) =>
  new Rule(antecendent.toArray, consequent.toArray, freqUnion, freqAntecedent)
}.filter(_.confidence >= minConfidence)    

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

生成(X, (Y, freq(X union Y)))表示项是值(2元组)的值。元组有一个unapply方法,允许在其上进行模式匹配,即您在case语句中看到的内容。每当类实现unapply时,您都可以在case语句中使用它,您可以将其分解为其属性并将每个属性分配给变量。