【问题标题】:Implementing the Apache Spark tutorial with FP-growth, No results on freqItemsets使用 FP-growth 实现 Apache Spark 教程,freqItemsets 上没有结果
【发布时间】: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


【解决方案1】:

一个简单的解决方案是创建一个 toList 方法,它只返回一个包含您银行所有成员的列表:

case class Bank(age:Integer, job: String, marital: String, education: String, balance: Integer)
{
    def toList():List[String]=
    {
        List(""+age, job, marital, education, ""+balance);
    }
}

请注意,我使用了一个字符串列表,因为 FP-growth 与“分类项目”一起使用。这意味着如果您输入整数或浮点数作为薪水或年龄,如果它们相差一美分(年龄相同),它会将每个薪水视为唯一的:

val bank1 = Bank(35, "engineer", "engaged", "college", 100000)
val bank2 = Bank(35, "engineer", "engaged", "college", 100001)

虽然bank1bank2的薪水很接近,但FP-growth会认为这两项是不同的。因此,您将难以对薪水进行分类,因为它们的差异很大。

我建议为每个age classsalary class定义一个enum,例如AGE_BETWEEN_0_18AGE_BETWEEN_18_25 ...

这样您将缩小直方图并让 FP-growth 完美运行。

P.S.:我不确定该对象是否应该称为Bank,我宁愿将其命名为BankCustomer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    • 2020-02-11
    • 1970-01-01
    • 2019-11-01
    • 1970-01-01
    相关资源
    最近更新 更多