scala spark mllib fpgrowth returns 每次都有不同的答案
scala spark mllib fpgrowth returns different answer each time
我正在使用 Spark 1.5.0 (cdh5.5.2)。我在我的交易数据上使用 运行 FpGrowth 算法,每次都得到不同的结果。我使用 linux diff 命令检查了我的交易数据,发现没有区别。 Scala中的fpgrowth函数是否涉及随机种子?为什么我每次都得到不同数量的频繁项集?有没有随意断掉的领带?此外,我使用的支持值非常低 - 当我增加支持时,这个问题就不存在了。我使用的支持是 0.000459。当我将其增加到 0.005 时,我没有收到错误消息。是否有任何需要使用的最低支持门槛?
感谢您的帮助。
这是我使用的代码:
val conf = new SparkConf()
conf.registerKryoClasses(数组(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 的长度时,我每次都得到不同的数字。
问题是 Cloudera 默认开启了 Kryo Serializer。默认情况下,Spark 下载(单独)有 Java 个序列化程序。当我 运行 FPGrowth 使用 Kryo Serializer 时,它会要求注册 Kryo 类。一旦我这样做,就不会弹出任何错误。但是,结果不正确。一旦我将它改回 Java Serializer,结果是正确的并且与 Spark 1.6.0 的结果相匹配。我仍然不知道问题是出在 FPGrowth 函数本身还是 Kryo 序列化也会影响其他 functions/libraries。
我正在使用 Spark 1.5.0 (cdh5.5.2)。我在我的交易数据上使用 运行 FpGrowth 算法,每次都得到不同的结果。我使用 linux diff 命令检查了我的交易数据,发现没有区别。 Scala中的fpgrowth函数是否涉及随机种子?为什么我每次都得到不同数量的频繁项集?有没有随意断掉的领带?此外,我使用的支持值非常低 - 当我增加支持时,这个问题就不存在了。我使用的支持是 0.000459。当我将其增加到 0.005 时,我没有收到错误消息。是否有任何需要使用的最低支持门槛?
感谢您的帮助。
这是我使用的代码:
val conf = new SparkConf() conf.registerKryoClasses(数组(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 的长度时,我每次都得到不同的数字。
问题是 Cloudera 默认开启了 Kryo Serializer。默认情况下,Spark 下载(单独)有 Java 个序列化程序。当我 运行 FPGrowth 使用 Kryo Serializer 时,它会要求注册 Kryo 类。一旦我这样做,就不会弹出任何错误。但是,结果不正确。一旦我将它改回 Java Serializer,结果是正确的并且与 Spark 1.6.0 的结果相匹配。我仍然不知道问题是出在 FPGrowth 函数本身还是 Kryo 序列化也会影响其他 functions/libraries。