使用reduce操作时如何节省时间?

时间:2015-10-19 03:13:52

标签: apache-spark

我使用reduce操作来处理群集上的数据,但我发现它花费了太多时间。要减少的RDD的类型是:

public class Assg23
{
    public static void main(String[] args)
    {

            String w1 = args[0];
            String w2 = args[1];

            int numberOfCrosses = 0;

        int pos1 = 0;
            int pos2 = 0;


            for(int i=0; i < w1.length(); i++)
            {
                for(int j=0; j < w2.length(); j++)
                {   
                    if(w1.charAt(i) == w2.charAt(j))
                    {
                        numberOfCrosses++;
                        crossesAt(w1, pos1, w2, pos2);
                        printCross(w1, pos1, w2, pos2);
                    }
                }
            }

        if(numberOfCrosses == 0)
        {
            System.out.println("Words do not cross");
        }
    }

    private static boolean crossesAt(String w1, int pos1, String w2, int pos2)
    {
        if(w1.charAt(pos1) == w2.charAt(pos2))
        {
            return true;
        }
        else
        {
            return false;
        }

    }

    private static void printCross(String w1, int pos1, String w2, int pos2)
    {
        for(int i=0; i < w1.length(); i++)
        {
            for(int j = 0; j < w2.length(); j++)
            {
                if(j == pos1)
                {
                    System.out.print(w2.charAt(i));
                }
                if(i == pos2)
                {   
                    System.out.print(w1.charAt(j));
                }
                else
                {
                    System.out.print(" ");
                }   

            }
        }



    }

问题1:如果rdd的类型很简单,比如RDD [Array [Double]],可能花费更少的时间?
问题2:使用rdd.reduce节省时间的其他任何方式?

1 个答案:

答案 0 :(得分:0)

ReduceByKey方法有两个参数 - reduceByKey(func,[numTasks])。首先是功能,无论你想对它执行什么操作,其次是“任务数”,它是可选参数。

设置最佳任务数,取决于您的机器配置。

例如。 的 Rdd.redueceByKey(FUNC,4) 它将创建四个并行的进程/任务来执行reduce操作。它将比你目前的表现快四倍。