2016-09-13 4 views
-1

Я этот код, чтобы найти некоторые ассоциативные правила:Спарк 1.6 - ассоциативные правила алгоритма - не может быть применен к (org.apache.spark.rdd.RDD [Array [String]])

import org.apache.spark.mllib.fpm.AssociationRules 
import org.apache.spark.mllib.fpm.FPGrowth.FreqItemset 

val data = sc.textFile("FILE"); 

val transactions: RDD[Array[String]] = data.map(s => s.trim.split(',')); 

val ar = new AssociationRules() 
    .setMinConfidence(0.8) 
val results = ar.run(transactions) 

results.collect().foreach { rule => 
    println("[" + rule.antecedent.mkString(",") 
    + "=>" 
    + rule.consequent.mkString(",") + "]," + rule.confidence) 
} 

Но Я получаю эту ошибку:

<console>:50: error: overloaded method value run with alternatives: 
    [Item](freqItemsets: org.apache.spark.api.java.JavaRDD[org.apache.spark.mllib.fpm.FPGrowth.FreqItemset[Item]])org.apache.spark.api.java.JavaRDD[org.apache.spark.mllib.fpm.AssociationRules.Rule[Item]] <and> 
    [Item](freqItemsets: org.apache.spark.rdd.RDD[org.apache.spark.mllib.fpm.FPGrowth.FreqItemset[Item]])(implicit evidence$1: scala.reflect.ClassTag[Item])org.apache.spark.rdd.RDD[org.apache.spark.mllib.fpm.AssociationRules.Rule[Item]] 
cannot be applied to (org.apache.spark.rdd.RDD[Array[String]]) 
     val results = ar.run(transactions) 

Как я могу преобразовать этот rdd в тип, которым нужны правила ассоциации?

Большое спасибо!

+0

Если ответ решить вашу проблему, то вы должны пометить его как правильный ответ. Он мотивирует ответчиков и помогает тем, кто читает ответы. – Samar

ответ

2

Вы должны сначала создать FPGrowthModel и затем передать freqItemsets, как показано ниже:

import org.apache.spark.mllib.fpm.AssociationRules 
import org.apache.spark.mllib.fpm.FPGrowth.FreqItemset 
import org.apache.spark.mllib.fpm.FPGrowth 

val data = sc.textFile("FILE"); 

val transactions: RDD[Array[String]] = data.map(s => s.trim.split(',')); 

val fpg = new FPGrowth() 
    .setMinSupport(0.2) 
    .setNumPartitions(10) 

val model = fpg.run(transactions) // creates the FPGrowthModel 

val ar = new AssociationRules() 
    .setMinConfidence(0.8) 

val results = ar.run(model.freqItemsets)