Github user ravipesala commented on a diff in the pull request:

    https://github.com/apache/incubator-carbondata/pull/263#discussion_r87172561
  
    --- Diff: 
integration/spark/src/main/java/org/apache/carbondata/spark/load/CarbonLoaderUtil.java
 ---
    @@ -215,6 +227,105 @@ public static void executeGraph(CarbonLoadModel 
loadModel, String storeLocation,
                 info, loadModel.getPartitionId(), 
loadModel.getCarbonDataLoadSchema());
       }
     
    +  public static void executeNewDataLoad(CarbonLoadModel loadModel, String 
storeLocation,
    +      String hdfsStoreLocation, RecordReader<NullWritable, 
StringArrayWritable>[] recordReaders)
    +      throws Exception {
    +    if (!new File(storeLocation).mkdirs()) {
    +      LOGGER.error("Error while creating the temp store path: " + 
storeLocation);
    +    }
    +    CarbonDataLoadConfiguration configuration = new 
CarbonDataLoadConfiguration();
    +    String databaseName = loadModel.getDatabaseName();
    +    String tableName = loadModel.getTableName();
    +    String tempLocationKey = databaseName + 
CarbonCommonConstants.UNDERSCORE + tableName
    +        + CarbonCommonConstants.UNDERSCORE + loadModel.getTaskNo();
    +    CarbonProperties.getInstance().addProperty(tempLocationKey, 
storeLocation);
    +    CarbonProperties.getInstance()
    +        .addProperty(CarbonCommonConstants.STORE_LOCATION_HDFS, 
hdfsStoreLocation);
    +    // CarbonProperties.getInstance().addProperty("store_output_location", 
outPutLoc);
    +    CarbonProperties.getInstance().addProperty("send.signal.load", 
"false");
    +
    +    CarbonTable carbonTable = 
loadModel.getCarbonDataLoadSchema().getCarbonTable();
    +    AbsoluteTableIdentifier identifier =
    +        carbonTable.getAbsoluteTableIdentifier();
    +    configuration.setTableIdentifier(identifier);
    +    String csvHeader = loadModel.getCsvHeader();
    +    String csvFileName = null;
    +    if (csvHeader != null && !csvHeader.isEmpty()) {
    +      
configuration.setHeader(CarbonDataProcessorUtil.getColumnFields(csvHeader, 
","));
    +    } else {
    +      CarbonFile csvFile =
    +          
CarbonDataProcessorUtil.getCsvFileToRead(loadModel.getFactFilesToProcess().get(0));
    +      csvFileName = csvFile.getName();
    +      csvHeader = CarbonDataProcessorUtil.getFileHeader(csvFile);
    +      configuration.setHeader(
    +          CarbonDataProcessorUtil.getColumnFields(csvHeader, 
loadModel.getCsvDelimiter()));
    +    }
    +    CarbonDataProcessorUtil
    +        .validateHeader(loadModel.getTableName(), csvHeader, 
loadModel.getCarbonDataLoadSchema(),
    +            loadModel.getCsvDelimiter(), csvFileName);
    +
    +    configuration.setPartitionId(loadModel.getPartitionId());
    +    configuration.setSegmentId(loadModel.getSegmentId());
    +    configuration.setTaskNo(loadModel.getTaskNo());
    +    
configuration.setDataLoadProperty(DataLoadProcessorConstants.COMPLEX_DELIMITERS,
    +        new String[] { loadModel.getComplexDelimiterLevel1(),
    +            loadModel.getComplexDelimiterLevel2() });
    +    
configuration.setDataLoadProperty(DataLoadProcessorConstants.SERIALIZATION_NULL_FORMAT,
    +        loadModel.getSerializationNullFormat().split(",")[1]);
    +    
configuration.setDataLoadProperty(DataLoadProcessorConstants.FACT_TIME_STAMP,
    +        loadModel.getFactTimeStamp());
    +    
configuration.setDataLoadProperty(DataLoadProcessorConstants.BAD_RECORDS_LOGGER_ENABLE,
    +        loadModel.getBadRecordsLoggerEnable().split(",")[1]);
    +    
configuration.setDataLoadProperty(DataLoadProcessorConstants.BAD_RECORDS_LOGGER_ACTION,
    +        loadModel.getBadRecordsAction().split(",")[1]);
    +    
configuration.setDataLoadProperty(DataLoadProcessorConstants.FACT_FILE_PATH,
    +        loadModel.getFactFilePath());
    +    List<CarbonDimension> dimensions =
    +        
carbonTable.getDimensionByTableName(carbonTable.getFactTableName());
    +    List<CarbonMeasure> measures =
    +        carbonTable.getMeasureByTableName(carbonTable.getFactTableName());
    +    Map<String, String> dateFormatMap =
    +        
CarbonDataProcessorUtil.getDateFormatMap(loadModel.getDateFormat());
    +    List<DataField> dataFields = new ArrayList<>();
    +    List<DataField> complexDataFields = new ArrayList<>();
    +
    +    // First add dictionary and non dictionary dimensions because these 
are part of mdk key.
    +    // And then add complex data types and measures.
    +    for (CarbonColumn column : dimensions) {
    +      DataField dataField = new DataField(column);
    +      dataField.setDateFormat(dateFormatMap.get(column.getColName()));
    +      if (column.isComplex()) {
    +        complexDataFields.add(dataField);
    +      } else {
    +        dataFields.add(dataField);
    +      }
    +    }
    +    dataFields.addAll(complexDataFields);
    +    for (CarbonColumn column : measures) {
    +      // This dummy measure is added when no measure was present. We no 
need to load it.
    +      if (!(column.getColName().equals("default_dummy_measure"))) {
    +        dataFields.add(new DataField(column));
    +      }
    +    }
    +    Iterator[] iterators = new RecordReaderIterator[recordReaders.length];
    +    configuration.setDataFields(dataFields.toArray(new 
DataField[dataFields.size()]));
    +    for (int j = 0; j < recordReaders.length; j++) {
    +      iterators[j] = new RecordReaderIterator(recordReaders[j]);
    +    }
    +    AbstractDataLoadProcessorStep loadProcessorStep =
    +        new DataLoadProcessBuilder().build(configuration, iterators);
    --- End diff --
    
    I have moved most of the logic to builder now.
    And regarding loadfromcsv or loadfromdataframe or completly depends on the 
RDD. I guess We should have standard API that takes Iterators. And it is 
respective RDD responsibility to provide iterators to load API.
    
    And yes, we can directly use FileSplit but code changes are nore in other 
flow that is why I have extended FileSplit. We can remove BlockDetails while 
removing kettle. I have kept TODO here.


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---

Reply via email to