मेरे पास स्काला के साथ FrequetItemset को फ़िल्टर करने के बारे में एक शुरुआती प्रश्न है।

कोड पुस्तक से शुरू होता है:

import org.apache.spark.mllib.fpm.FPGrowth
import org.apache.spark.rdd.RDD

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

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

  val model = fpg.run(transactions)

अब मैं 'aaa' से शुरू होने वाले आइटम को फ़िल्टर करना चाहता हूं, उदाहरण के लिए "aaa_ccc", परिणाम से

मैंने कोशिश की :

val filtered_result = model.freqItemsets.itemset.filter{ item => startwith("aaa")}

तथा

val filtered_result = model.freqItemsets.filter( itemset.items => startwith("aaa"))

तथा

val filtered_result = model.freqItemsets.filter( itemset => items.startwith("aaa"))

मैंने क्या ग़लत किया था?

0
Toren 2 मार्च 2016, 19:15

2 जवाब

सबसे बढ़िया उत्तर

सुझाए गए कोडों में से कोई भी संकलित नहीं होगा। तो मुझे यकीन नहीं है कि आप जिस समस्या के बारे में बात कर रहे हैं वह संकलित क्यों नहीं हो रही है या यह है कि आपको गलत परिणाम मिलते हैं।

स्केल संग्रह को फ़िल्टर विधि और पैरामीटर के रूप में पासिंग विधि का उपयोग करके फ़िल्टर किया जा सकता है, जिसे दो तरीकों से लिखा जा सकता है:

coll filter { item => filterLogic(item) }

तो freqItemsets को फ़िल्टर करने के लिए आप कुछ इस तरह उपयोग करेंगे:

model.freqItemsets filter { itemSet => filterLogic(itemSet) }

यदि आप सभी freqItemsets को फ़िल्टर करना चाहते हैं जिनमें कम से कम एक स्ट्रिंग है जो "आआ" से शुरू होती है

model.freqItemsets filter { itemSet => itemSet.items exists { item => item.startsWith("aaa") }

या यदि आपका लक्ष्य freqItemset के अंदर वस्तुओं को फ़िल्टर करना था तो:

model.freqItemsets map { itemSet => itemSet.copy(items = itemSet filter { _.startsWith("aaa") }) }

ध्यान दें कि स्कैला में आप इसका उपयोग कर सकते हैं: someCollection filter { item => item.startsWith("string") } जो समान है: someCollection filter { _.startsWith("string") }

उम्मीद है ये मदद करेगा।

2
Nikola Stojiljkovic 2 मार्च 2016, 20:12

items एक Array[String] है। यदि आप filter कोई भी आइटम सेट करना चाहते हैं जिसमें वह आइटम है जो aaa से शुरू होता है, तो आपको कुछ इस तरह की आवश्यकता होगी:

model.freqItemsets.filter(_.items.exists(_.startsWith("aaa")))
1
zero323 2 मार्च 2016, 20:02