Hi John, I haven't tested this but I believe the the issue is that the CSV reader want to iterate on lines, instead it's being given a single string. Try this instead: Text = IOUtils.readLines(inputStream, StandardCharsets.UTF_8)
Thanks On Mon, Jun 17, 2019 at 8:00 PM John McGinn <[email protected]> wrote: > 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 >
