First off, I am far from a Python expert, so this may be simple to others, but 
just not me. 

The incoming FlowFile is a CSV file of many lines, we are trying to parse them 
into arrays to then search for previous records or future records based on the 
date which is 1 of the CSV fields. The python code appears the same as what 
I've seen online elsewhere, but the problem is that each call to csv.reader() 
is returning a single letter. I've gone through the CookBooks by Matt Burgess, 
and searched for things which talk about the .read() method having an issue, 
but all I have is the inputStream in the PyCallback. I attempted to convert the 
inputStream into a BufferedStreamReader to see if that would work, but the 
csv.reader() docs say the first param has to be an iterator, or iterator-able.

class PyStreamCallback(StreamCallback):
        def __init__(self):
                pass

        def process(self, inputStream, outputStream):
                try:
                        Text = IOUtils.toString(inputStream, 
StandardCharsets.UTF_8)

                        reader = csv.reader(Text,delimiter=',')
                        for row in reader:
                                outputStream.write("~".join(row))
                                outputStream.write("->")

This is a scaled down part of the code, but basically, each time through the 
for loop, I get a single letter printed out before the arrow hits, rather than 
the entire comma-seperated field.

Currently using NiFi 1.7.0, so I'm not sure if this is something that is fixed, 
or if a new version of jython with the newer NiFi's fixes this.

Data is as follows:
2019-06-05 00:00:28.008,f_Some.Data.Value,0,0.0
2019-06-05 00:01:28.553,f_Some.Other.Data.Value,0,0.0
2019-06-05 00:02:29.098,f_Last01.Data.Value,0,0.0

Thoughts?

Thanks,
John

Reply via email to