Ich versuche, eine normale Datei von HDFS in der Klasse zu lesen, die ich durch das Senden von Funken ausführen würde.Sollte ich einen StringBuilder oder einen StringBuffer in Spark verwenden?
Ich habe eine Methode, die eine String-Operationen und seine aus dieser Zeichenfolge Ausgabe ich RDD erstellen.
Ich führe die folgenden String-Operationen vor dem Erstellen einer RDD.
Sollte ich einen StringBuilder oder einen StringBuffer für die Variable valueString verwenden?
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"));
}
}
}
Ich verstehe den thread-sicheren Teil, der Zweifel, den ich hatte war, hat Multithreading irgendetwas mit lokalen Variablen zu tun, während ich durch Funken-Submission ausführen? –
Thread-Sicherheit ist nur ein Problem, wenn Sie das Objekt zwischen mehreren Threads teilen. Wenn Ihr StringBuilder nur innerhalb einer einzigen Methode lebt und Sie ihn nie irgendwo weitergeben (wie sie normalerweise verwendet werden, wird nur der resultierende String ausgegeben), dann geht es Ihnen gut. – Thilo
"Wenn Ihr StringBuilder nur innerhalb einer einzigen Methode lebt". Lokale Variablen leben auf dem Stack. Wenn zehn Threads dieselbe Methode ausführen, erhalten sie jeweils ihre eigene unabhängige "Kopie". (Wenn Sie die Referenz an eine Stelle außerhalb der Methode übergeben, z. B. wenn Sie sie auf ein Objektfeld setzen, erhalten andere Threads möglicherweise die Instanz.) – Thilo