Dear community,
I have a hypothesis which states that using the csv module and Python 2.7 to perform a simple processing task using the data stored into a big *.csv is going to have a significant positive impact in the time needed to perform the task in contrast to using  the FME tools to perform the same task. I have assigned both software the following simple task into a "startup python script" in an empty workspace with one published parameter ('OSG_SDTF') which is used to acquire the path of the *.csv to be used in the task.
(A) Read a big *.csv file (i.e. 17,977,400 records with the values found in 19 columns which are stored within a single 2 GB comma-delimited *.csv file).
(B) Return a set (i.e. not duplicates are allowed) of the values found within one column of the big *.csv ('col0').
(C) Print the result into the 'Translation Log' in the FME workbench.
The code that I used is following:
###Â USINGÂ FMEÂ TOOLSÂ ###
import fmeobjects, fme
def param_value(parameter_name):
    return fme.macroValues
def reader_params():
    return fmeobjects.FMEDialog().sourcePrompt('','',r])>2]
def universal_reader(reader_name,parameters):
    return fmeobjects.FMEUniversalReader(reader_name,False,parameters)
def csv_value(csv_reader,csv_parameters,csv_filepath):
    result = a]
    o = csv_reader.open(csv_filepath,csv_parameters)
    feature = csv_reader.read()
    while feature != None:
        result.append(feature.getAttribute('col0'))
    return set(result)
CsvFilepath = param_value('OSG_SDTF')
CsvRParams = reader_params()
CsvReader = universal_reader('CSV',CsvRParams)
CsvValue = csv_value(CsvReader,CsvRParams,CsvFilepath)
print CsvValue
###Â USINGÂ PYTHONÂ 2.7Â &Â THEÂ CSVÂ MODULEÂ ###
import fme
import csv
def param_value(parameter_name):
    return fme.macroValuesÂparameter_name]
def csv_reader(file_path_r):
   Â
    open_file = open(file_path_r,'rb')
    return csv.reader(open_file,delimiter = ',')
   Â
def record_ids(csv_reader,value):
   Â
    result = a]
   Â
    for row in csv_reader:
        result.append(row value])
       Â
    return set(result)
CsvFilepath = param_value('OSG_SDTF')
CsvReader = csv_reader(CsvFilepath)
RecordIds = record_ids(CsvReader,0)
print RecordIds
Results:
Using the Python 2.7 & the csv module prints a result in 1 minute and 19 seconds, and using the FME tools the startup script kept going for 19 minutes when I just stopped it because I had proved my hypothesis on the efficiency of the csv module. NOTE: I also tried repeating the process in the FME workspace using an AttributeFilter and using the same *.csv and the result was rather disappointing because a result hadn't been produced after leaving the machine running overnight and the temporary folder was full with 26 GB of data!
Insights?
I use FME in every day tasks to support data quality, data consolidation, and data processing jobs for different formats however efficiency is also important to what I do. Is there a bench-marking team in Safe that could provide some insights on the efficiency of different readers so I could look for open-source alternatives to support data cleaning before importing the data into an FME workspace?