Java apachespark:如何通过限制结果来提高FP-Growth计算速度

Java apachespark:如何通过限制结果来提高FP-Growth计算速度,java,performance,apache-spark,Java,Performance,Apache Spark,最近,我试图通过ApacheSpark实现FP-Growth来评估数据。手头的数据基本上是购物车数据,包括客户和产品。 由于数据集非常复杂,频繁项集的计算需要很长时间。因此,我决定尝试通过为FrequentItemSet设置一个最大长度来过滤结果,如下所示: //To do run FPGrowthTest FPGrowth fpg = new FPGrowth().setMinSupport(minSupport).setNumPartitions(12); // run the mod

最近,我试图通过ApacheSpark实现FP-Growth来评估数据。手头的数据基本上是购物车数据,包括客户和产品。 由于数据集非常复杂,频繁项集的计算需要很长时间。因此,我决定尝试通过为FrequentItemSet设置一个最大长度来过滤结果,如下所示:

//To do run FPGrowthTest 

FPGrowth fpg = new FPGrowth().setMinSupport(minSupport).setNumPartitions(12);

// run the model on the values which are the products for each custome
JavaRDD<Iterable<String>> groupByValues = groupsForProduct.values();

FPGrowthModel<String> model = fpg.run(groupByValues);

double minConfidence = 0.3;

JavaRDD<FreqItemset<String>> filteredmodel = model.freqItemsets().toJavaRDD()
      .filter(new Function<FreqItemset<String>, Boolean>(){
            public Boolean call(FreqItemset<String> fi){
                if (fi.javaItems().size() <= 5){
                    return true;}
                else {
                    return false;
                }
            }

        });


filteredmodel.map(new Function<FPGrowth.FreqItemset<String>, String>() {        
            @Override public String call(FPGrowth.FreqItemset<String> fi) {
                return fi.javaItems() + " -> " + fi.freq();
            }
        }).saveAsTextFile(
            <path>);

AssociationRules ar = new AssociationRules();
ar.setMinConfidence(minConfidence);
ar.run(filteredmodel).saveAsTextFile(<path>);
//运行FPGrowthTest的步骤
FPGrowth fpg=new FPGrowth().setMinSupport(minSupport).setNumPartitions(12);
//根据每个客户的产品值运行模型
JavaRDD groupByValues=groupsForProduct.values();
FPGrowthModel model=fpg.run(groupByValues);
双最小置信度=0.3;
JavaRDD filteredmodel=model.freqItemsets().toJavaRDD()
.filter(新函数(){
公共布尔调用(FreqItemset-fi){

如果(fi.javaItems().size()是的,那么问题在于更复杂的事务(您提到的有很多项的事务)。所以我建议你删除这些,我也有同样的问题。平均票证有5个项目,我只有2个事务,有52或46个项目,这些项目使流程爆炸。一旦我删除了它们,我就可以毫无问题地运行它。所以,是的,删除异常值事务,你应该可以继续了。

什么是
minSupport
试着一个产品一个产品地做,minSupport取决于客户的数量。如果我这么短的话,我不确定这是否有意义。但要回答你的问题,第一次产品迭代的minSupport是10/12=0.83。它有足够的意义。筛选
frequeitemsets
不是一个解决方案,AFAIK目前无法解决配置为提前停止。但它仍然不能真正解释为什么它如此缓慢。在0.83支持阈值下,它通常应该收敛得相当快。问题是,一个客户有很多产品,这会增加一吨的复杂性。当我们只看一个产品时,这些数据中的值很有可能我想,由于大多数客户都购买类似的产品,所以零件是相似的。经过一个小时的处理,我得到的结果是一个大约20MB大的文件,它不是很大。我想这是因为必须进行复杂的转换。有什么办法可以让这个运行得更快吗?有没有比groupByKey更好的方法来排序t他有数据吗?