我应该在Spark中使用StringBuilder还是StringBuffer?

时间:2017-05-14 07:33:04

标签: apache-spark stringbuilder stringbuffer spark-submit

我正在尝试从课堂上的HDFS读取一个普通文件,我将通过spark-submit执行。

我有一个执行String操作的方法,我从这个字符串输出创建RDD。

我在创建RDD之前执行以下字符串操作。

我应该将StringBuilder或StringBuffer用于变量valueString吗?

        while ((line = bf.readLine()) != null) {
        String trimmedLine=line.trim();
        if(trimmedLine.charAt((trimmedLine.length()-1))==';'){
            if(extractionInProgress){
                valueString=valueString.concat(trimmedLine.substring(0,trimmedLine.indexOf(";")));
                keyValues.put(searchKey, valueString);
                extractionInProgress=false;
                valueString="";
            }
            else{
                int indexOfTab=trimmedLine.indexOf(" ");
                if(indexOfTab > -1){
                    String keyInLine=trimmedLine.substring(0,indexOfTab);
                    valueString=trimmedLine.substring(indexOfTab+1,trimmedLine.indexOf(";"));
                    keyValues.put(keyInLine, valueString);
                    valueString="";
                }
            }
        }
        else{
            if(!extractionInProgress){
                searchKey=trimmedLine;
                extractionInProgress=true;
            }
            else{
                valueString=valueString.concat(trimmedLine.concat("\n"));
            }
        }
    }

1 个答案:

答案 0 :(得分:1)

only difference between the twoStringBuffersynchronized种方法(这是你几乎不需要的)。因此,请将valueString保留为局部变量,然后使用StringBuilder

  

的valueString = valueString.concat(trimmedLine.concat( “\ n”));

这种代码让我想知道你是否想要连接一个多行字符串。也许您可以使用行列表生成RDD,并将一些当前预处理移动到Spark作业本身?