2017-05-30 17 views
2

https://spark.apache.org/docs/2.1.0/mllib-frequent-pattern-mining.html#fp-growthデータフレームに変換ScalaのFP-成長RDD出力

sample_fpgrowth.txtが https://github.com/apache/spark/blob/master/data/mllib/sample_fpgrowth.txt

、ここで見つけることができます私はその作業罰金Scalaでは上記のリンクでFP-成長例を走ったが、私が必要とするのは、RDDにある結果をデータフレームに変換する方法です。 これらRDD

model.freqItemsets and 
model.generateAssociationRules(minConfidence) 

どちらも、私の質問に与えられた例を挙げて詳細にそれを説明しています。

+1

可能な複製を必要とするものである(https://stackoverflow.com/questions/29383578/how-to-convert-rdd [スパークでのデータフレームにRDDオブジェクトを変換する方法] -object-to-dataframe-in-spark) – stefanobaghino

+0

私はエラーが発生したことを試みましたが、スカラーにとって新しいかもしれません。私の質問で与えられた例を詳細に説明できますか? –

+0

@ zero323私の質問で与えられた例で私を助けることができます –

答えて

2

dataframeを作成する方法は、いったんrddになると多くの方法があります。そのうちの一つは、私がFrequent Pattern Mining - RDD-based APIからのコードを使用しているあなたはfpgrowthテキストファイルを読み込み、rdd

val data = sc.textFile("path to sample_fpgrowth.txt that you have used") 
    val transactions: RDD[Array[String]] = data.map(s => s.trim.split(' ')) 

にひそかその後

val sparkSession = SparkSession.builder().appName("udf testings") 
    .master("local") 
    .config("", "") 
    .getOrCreate() 
val sc = sparkSession.sparkContext 
val sqlContext = sparkSession.sqlContext 
import sqlContext.implicits._ 

としてimportedするsqlContext.implicitsライブラリを必要.toDF機能を使用することです質問に記載されているもの

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

次のステップ最初dataframe

model.freqItemsets.map(itemset =>(itemset.items.mkString("[", ",", "]") , itemset.freq)).toDF("items", "freq").show(false) 

について.toDF機能

をコールすることで、これは第二dataframe

ため

+---------+----+ 
|items |freq| 
+---------+----+ 
|[z]  |5 | 
|[x]  |4 | 
|[x,z] |3 | 
|[y]  |3 | 
|[y,x] |3 | 
|[y,x,z] |3 | 
|[y,z] |3 | 
|[r]  |3 | 
|[r,x] |2 | 
|[r,z] |2 | 
|[s]  |3 | 
|[s,y] |2 | 
|[s,y,x] |2 | 
|[s,y,x,z]|2 | 
|[s,y,z] |2 | 
|[s,x] |3 | 
|[s,x,z] |2 | 
|[s,z] |2 | 
|[t]  |3 | 
|[t,y] |3 | 
+---------+----+ 
only showing top 20 rows 

になり

になり
val minConfidence = 0.8 
model.generateAssociationRules(minConfidence) 
    .map(rule =>(rule.antecedent.mkString("[", ",", "]"), rule.consequent.mkString("[", ",", "]"), rule.confidence)) 
    .toDF("antecedent", "consequent", "confidence").show(false) 

私はこのことを願ってい

+----------+----------+----------+ 
|antecedent|consequent|confidence| 
+----------+----------+----------+ 
|[t,s,y] |[x]  |1.0  | 
|[t,s,y] |[z]  |1.0  | 
|[y,x,z] |[t]  |1.0  | 
|[y]  |[x]  |1.0  | 
|[y]  |[z]  |1.0  | 
|[y]  |[t]  |1.0  | 
|[p]  |[r]  |1.0  | 
|[p]  |[z]  |1.0  | 
|[q,t,z] |[y]  |1.0  | 
|[q,t,z] |[x]  |1.0  | 
|[q,y]  |[x]  |1.0  | 
|[q,y]  |[z]  |1.0  | 
|[q,y]  |[t]  |1.0  | 
|[t,s,x] |[y]  |1.0  | 
|[t,s,x] |[z]  |1.0  | 
|[q,t,y,z] |[x]  |1.0  | 
|[q,t,x,z] |[y]  |1.0  | 
|[q,x]  |[y]  |1.0  | 
|[q,x]  |[t]  |1.0  | 
|[q,x]  |[z]  |1.0  | 
+----------+----------+----------+ 
only showing top 20 rows 

はあなたの

+0

これは私がトンに感謝を期待していたものです。 –

+0

私の喜び@ArunGunalan :)答えがあなたを助けてくれてうれしい –

関連する問題