You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@nifi.apache.org by "N, Vyshali" <Vy...@Honeywell.com> on 2017/11/04 18:37:14 UTC
Issue with executescript
Hi,
I'm trying to do data anonymization using faker package in Nifi for which I'm using executescript processor.
The code references are from http://go.databricks.com/hubfs/notebooks/blogs/Healthcare%20PII%20anonymization/Healthcare%20PII%20anonymization%20example.html
I have added my code here.
import java.io
from org.apache.commons.io import IOUtils
from java.nio.charset import StandardCharsets
from org.apache.nifi.processor.io import StreamCallback
import unicodecsv as csv
from faker import Factory
from collections import defaultdict
import io
class TransformCallback(StreamCallback):
def _init_(self):
pass
def process(self,inputStream,outputStream):
inputdata = IOUtils.toString(inputStream,StandardCharsets.ISO_8859_1)
text = csv.DictReader(io.StringIO(inputdata))
output=[]
#text = inputdata.decode('utf-8')
faker = Factory.create()
names = defaultdict(faker.name)
emails = defaultdict(faker.email)
ssns = defaultdict(faker.ssn)
phone_numbers = defaultdict(faker.phone_number)
for row in text:
row["name"] = names[row["name"]]
row["email"] = emails[row["email"]]
row["ssn"] = ssns[row["ssn"]]
row["phone_number"] = phone_numbers[row["phone_number"]]
outputStream.write(text)
flowFile = session.get()
if flowFile != None:
flowFile = session.write(flowFile,TransformCallback())
session.transfer(flowFile, REL_SUCCESS)
session.commit()
I'm stuck with an error "TypeError:write():1st arg cant be coerced to int,byte[] at <script> at line number 40"
Please give me some suggestions on how should I improve.I'm quite new to python and executescript processor.
Thanks,
Vyshali
Re: Issue with executescript
Posted by Mike Thomsen <mi...@gmail.com>.
I think it's telling you that outputStream.write(text) needs to be
(text.encode('utf-8'))
On Sat, Nov 4, 2017 at 2:37 PM, N, Vyshali <Vy...@honeywell.com> wrote:
> Hi,
>
>
>
> I’m trying to do data anonymization using faker package in Nifi for which
> I’m using executescript processor.
>
> The code references are from http://go.databricks.com/
> hubfs/notebooks/blogs/Healthcare%20PII%20anonymization/Healthcare%
> 20PII%20anonymization%20example.html
>
> I have added my code here.
>
>
>
> import java.io
>
> from org.apache.commons.io import IOUtils
>
> from java.nio.charset import StandardCharsets
>
> from org.apache.nifi.processor.io import StreamCallback
>
> import unicodecsv as csv
>
> from faker import Factory
>
> from collections import defaultdict
>
> import io
>
>
>
> class TransformCallback(StreamCallback):
>
> def _init_(self):
>
> pass
>
>
>
> def process(self,inputStream,outputStream):
>
> inputdata = IOUtils.toString(inputStream,
> StandardCharsets.ISO_8859_1)
>
> text = csv.DictReader(io.StringIO(inputdata))
>
> output=[]
>
> #text = inputdata.decode('utf-8')
>
> faker = Factory.create()
>
> names = defaultdict(faker.name)
>
> emails = defaultdict(faker.email)
>
> ssns = defaultdict(faker.ssn)
>
> phone_numbers = defaultdict(faker.phone_number)
>
>
>
> for row in text:
>
> row["name"] = names[row["name"]]
>
> row["email"] = emails[row["email"]]
>
> row["ssn"] = ssns[row["ssn"]]
>
> row["phone_number"] = phone_numbers[row["phone_number"]]
>
>
>
>
>
> outputStream.write(text)
>
>
>
> flowFile = session.get()
>
> if flowFile != None:
>
> flowFile = session.write(flowFile,TransformCallback())
>
> session.transfer(flowFile, REL_SUCCESS)
>
> session.commit()
>
>
>
>
>
>
>
> I’m stuck with an error “*TypeError:write():1st arg cant be coerced to
> int,byte[] at <script> at line number 40*”
>
> Please give me some suggestions on how should I improve.I’m quite new to
> python and executescript processor.
>
>
>
> Thanks,
>
> Vyshali
>