X Tutup
import java.io.*; import java.util.ArrayList; public class ExternalSort { // readers and writers needed for the files private static FileReader _input; private static BufferedReader _bufRead; private static FileReader _input2; private static BufferedReader _bufRead2; private static FileWriter _output; private static BufferedWriter _bufWrite; private static String identifierRegex = "[a-zA-Z]+\\w*"; // the main() function public static void main(String[] args) { String relation = "test"; // the code takes care of the .CSV String attribute = "B"; externalSort(relation, attribute); System.out.println("The relation was sorted"); } // returns an array of ints given an array of strings that should be ints private static Integer[] getIntsFromStringArray(String[] row) { return getIntsFromStringArray(row, false); } private static Integer[] getIntsFromStringArray(String[] row, boolean nullIsZero) { Integer [] rowAsInts = new Integer[row.length]; for(int i=0; i tenKRows = new ArrayList(); int numFiles = 0; while (row!=null) { // get 10k rows for(int i=0; i<10000; i++) { String line = initRelationReader.readLine(); if (line==null) { row = null; break; } row = line.split(","); tenKRows.add(getIntsFromStringArray(row)); } // sort the rows tenKRows = mergeSort(tenKRows, indexToCompare); // write to disk FileWriter fw = new FileWriter(relation + "_chunk" + numFiles + ".csv"); BufferedWriter bw = new BufferedWriter(fw); bw.write(flattenArray(header,",")+"\n"); for(int i=0; i mergefr = new ArrayList(); ArrayList mergefbr = new ArrayList(); ArrayList filerows = new ArrayList(); FileWriter fw = new FileWriter(relation + "_sorted.csv"); BufferedWriter bw = new BufferedWriter(fw); String [] header; boolean someFileStillHasRows = false; for (int i=0; i mergeSort(ArrayList arr, int index) { ArrayList left = new ArrayList(); ArrayList right = new ArrayList(); if(arr.size()<=1) return arr; else { int middle = arr.size()/2; for (int i = 0; i merge(ArrayList left, ArrayList right, int index) { ArrayList result = new ArrayList(); while (left.size() > 0 && right.size() > 0) { if(left.get(0)[index] <= right.get(0)[index]) { result.add(left.get(0)); left.remove(0); } else { result.add(right.get(0)); right.remove(0); } } if (left.size()>0) { for(int i=0; i0) { for(int i=0; i
X Tutup