【发布时间】:2016-06-13 05:39:53
【问题描述】:
我使用的是 Spark 1.5.0 (cdh5.5.2)。我在我的交易数据上运行 FpGrowth 算法,每次都会得到不同的结果。我使用 linux diff 命令检查了我的交易数据,发现没有区别。 Scala中的fpgrowth函数是否涉及任何随机种子?为什么每次我得到不同数量的频繁项集?有没有随机打断的领带?另外,我使用了一个非常低的支持值——当我增加支持时,这个问题就不存在了。我使用的支持是 0.000459。当我将其增加到 0.005 时,我没有收到错误。是否有需要使用的最低支持门槛?
感谢您的帮助。
这是我使用的代码:
val conf = new SparkConf() conf.registerKryoClasses(Array(classOf[ArrayBuffer[String]], classOf[ListBuffer[String]]))
val sc = new SparkContext(conf)
val data = sc.textFile("path/test_rdd.txt")
val transactions = data.map(x=>(x.split('\t')))
val transactioncount = transactions.count()
print(transactioncount)
print("\n")
transactions.cache()
val fpg = new FPGrowth().setMinSupport(0.000459)
val model = fpg.run(transactions)
print("\n")
print(model.freqItemsets.collect().length)
print("\n")
我在事务计数中得到相同的数字。但是,当我打印作为 FPGrowth 输出的 RDD 长度时,每次都会得到不同的数字。
【问题讨论】:
-
我们很乐意为您提供帮助,但如果没有可重现的示例,那么我们就不可能。
-
FPgrowth 每次都应该返回完全相同的结果。启动调试器 - 您身边或 Mllib 中可能存在错误。
-
这是一个 80MB 的文件。我尝试仅对前 1000 笔交易进行测试,但无法重现 Alberto Bonsanto。我会尝试看看是否可以用更少的记录来模拟问题。我目前正在调试,但对于相同的输入文件和相同的截止,我得到不同的输出。当支持更高一点时,没有问题。
标签: scala apache-spark data-mining apache-spark-mllib