【发布时间】:2016-07-29 01:01:01
【问题描述】:
这是我在这里的第一个问题,我希望我做对了。
所以,我试图了解 Apache Spark 及其 FP-growth 算法。因此我尝试将 FP-growth 教程应用到 Spark 自带的银行教程中。
我对所有这些数据映射和 scala 都非常陌生,所以这个问题对你们来说可能看起来很基础,但我感谢你的帮助!
case class Bank(age:Integer, job: String, marital: String, education:
String, balance: Integer)
val bank = bankTest.map(s=>s.split(";")).filter(s=>s(0)!= "\"age\"").map(
s=>Bank(s(0).toInt,
s(1).replaceAll("\"", ""),
s(2).replaceAll("\"", ""),
s(3).replaceAll("\"", ""),
s(5).replaceAll("\"", "").toInt
)
)
val transactions: RDD[Array[Object]] = bank.map(x => Array(x))
val fpg = new FPGrowth()
.setMinSupport(0.1)
.setNumPartitions(10)
val model = fpg.run(transactions)
model.freqItemsets.collect().foreach { itemset =>
println(itemset.items.mkString("[", ",", "]") + ", " + itemset.freq)
}
这是我编写的代码,我认为问题在于我的银行元素到交易变量的映射。代码运行正常,但没有结果。我猜这是因为 FP-growth 算法将类型银行的不同对象相互比较,这些对象包含在事务变量中。当然没有20%的支持度的整个对象。
所以问题是:如何对我的数据中的列而不是整个对象进行 FP-growth 检查?
例如:“job = manager”的支持率应该在 20% 左右,因此它应该显示为频繁,而我的结果中没有。
提前谢谢你!
【问题讨论】:
-
这里的问题似乎和我想的一样。当我使用 transactions = bankTest.map(s => s.split(";")) 作为我的 RDD 时,我得到的错误是值必须是唯一的。在这个拆分的字符串中,它们不是。因此,我首先将它们放入我的对象中。好吧,我想我开始明白了。有什么办法可以将我的对象分成不同的部分?
标签: scala apache-spark data-mining