Rename Duplicate Fields

Updated: Dec 26, 2023

This example shows how to rename fields while allowing the result to contain multiple fields with the same name.  Normally, the RenamField transformer does not allow duplicate names.  However, the default behavior can be changed using the flag in this example.

 

Input CSV file

Account,LastName,FirstName,Balance,CreditLimit,AccountCreated,Rating
101,Reeves,Keanu,9315.45,10000.00,1/17/1998,A
312,Butler,Gerard,90.00,1000.00,8/6/2003,B
868,Hewitt,Jennifer Love,0,17000.00,5/25/1985,B
761,Pinkett-Smith,Jada,49654.87,100000.00,12/5/2006,A
317,Murray,Bill,789.65,5000.00,2/5/2007,C

 

Java Code Listing

package com.northconcepts.datapipeline.examples.cookbook;

import com.northconcepts.datapipeline.core.DataReader;
import com.northconcepts.datapipeline.core.StreamWriter;
import com.northconcepts.datapipeline.csv.CSVReader;
import com.northconcepts.datapipeline.job.Job;
import com.northconcepts.datapipeline.transform.RenameField;
import com.northconcepts.datapipeline.transform.TransformingReader;

import java.io.File;

public class RenameDuplicateFields {
    public static void main(String[] args) {
        DataReader reader = new CSVReader(new File("example/data/input/credit-balance-01.csv"))
                .setFieldNamesInFirstRow(true);

        reader = new TransformingReader(reader)
                .add(new RenameField("LastName", "Name"))
                .add(new RenameField("FirstName", "Name").setAllowDuplicateFieldNames(true))
                .add(new RenameField("Balance", "CreditLimit").setAllowDuplicateFieldNames(true));

        Job.run(reader, new StreamWriter(System.out));
    }
}

 

Code walkthrough

  1. CSVReader is created corresponding to the input file credit-balance-01.csv.
  2. The CSVReader.setFieldNamesInFirstRow(true) method is invoked to specify that the names specified in the first row should be used as field names.
  3. A TransformingReader is created to apply one or more transformations to the incoming data sequentially.
  4. RenameField object accepts oldName and newName String arguments. By default, renaming does not allow duplicate field names in the dataset. To enable this feature, we need to call setAllowDuplicateFieldNames(true) method. In the given example, the "LastName" and "FirstName" fields are renamed to "Name".
  5.  Data is transferred from the reader to the StreamWriter(System.out) via Job.run() method.

 

Console Output

-----------------------------------------------
0 - Record {
    0:[Account]:STRING=[101]:String
    1:[Name]:STRING=[Reeves]:String
    2:[Name]:STRING=[Keanu]:String
    3:[CreditLimit]:STRING=[9315.45]:String
    4:[CreditLimit]:STRING=[10000.00]:String
    5:[AccountCreated]:STRING=[1/17/1998]:String
    6:[Rating]:STRING=[A]:String
}

-----------------------------------------------
1 - Record {
    0:[Account]:STRING=[312]:String
    1:[Name]:STRING=[Butler]:String
    2:[Name]:STRING=[Gerard]:String
    3:[CreditLimit]:STRING=[90.00]:String
    4:[CreditLimit]:STRING=[1000.00]:String
    5:[AccountCreated]:STRING=[8/6/2003]:String
    6:[Rating]:STRING=[B]:String
}

-----------------------------------------------
2 - Record {
    0:[Account]:STRING=[868]:String
    1:[Name]:STRING=[Hewitt]:String
    2:[Name]:STRING=[Jennifer Love]:String
    3:[CreditLimit]:STRING=[0]:String
    4:[CreditLimit]:STRING=[17000.00]:String
    5:[AccountCreated]:STRING=[5/25/1985]:String
    6:[Rating]:STRING=[B]:String
}

-----------------------------------------------
3 - Record {
    0:[Account]:STRING=[761]:String
    1:[Name]:STRING=[Pinkett-Smith]:String
    2:[Name]:STRING=[Jada]:String
    3:[CreditLimit]:STRING=[49654.87]:String
    4:[CreditLimit]:STRING=[100000.00]:String
    5:[AccountCreated]:STRING=[12/5/2006]:String
    6:[Rating]:STRING=[A]:String
}

-----------------------------------------------
4 - Record {
    0:[Account]:STRING=[317]:String
    1:[Name]:STRING=[Murray]:String
    2:[Name]:STRING=[Bill]:String
    3:[CreditLimit]:STRING=[789.65]:String
    4:[CreditLimit]:STRING=[5000.00]:String
    5:[AccountCreated]:STRING=[2/5/2007]:String
    6:[Rating]:STRING=[C]:String
}

-----------------------------------------------
5 records
Mobile Analytics