需要python代码的帮助才能将json读取到kinesis
我收到了一项要完成的任务。我有一个Json文件,它有2000多条记录。因此,要求是: 从CSV读取 形成JSON有效载荷需要覆盖适当数量的字段,考虑订单抬头字段 按键移动确保每行都有自己的正确键 从动觉中检索相同的内容。 我的Json文件如下所示:需要python代码的帮助才能将json读取到kinesis,python,json,amazon-web-services,amazon-kinesis,Python,Json,Amazon Web Services,Amazon Kinesis,我收到了一项要完成的任务。我有一个Json文件,它有2000多条记录。因此,要求是: 从CSV读取 形成JSON有效载荷需要覆盖适当数量的字段,考虑订单抬头字段 按键移动确保每行都有自己的正确键 从动觉中检索相同的内容。 我的Json文件如下所示: {"Affliate Number": "350", "Bonus Period": "12003", "Business Entity": &quo
{"Affliate Number": "350", "Bonus Period": "12003", "Business Entity": "350", "Distributor Number": "00000971728", "Payment Amount": "00000000000393.45", "BANK ID": "SBC", "Account": "0000007659007", "Payment Date": "2020-04-15", "Payment Group": "90", "Payment Method": "02", "": ""}
{"Affliate Number": "350", "Bonus Period": "12003", "Business Entity": "350", "Distributor Number": "00000829264", "Payment Amount": "00000000000211.20", "BANK ID": "SBC", "Account": "0515096412533", "Payment Date": "2020-04-15", "Payment Group": "90", "Payment Method": "02", "": ""}
{"Affliate Number": "350", "Bonus Period": "12003", "Business Entity": "350", "Distributor Number": "00001070013", "Payment Amount": "00000000000329.72", "BANK ID": "BCOM", "Account": "017200075595", "Payment Date": "2020-04-15", "Payment Group": "90", "Payment Method": "02", "": ""}
我的生产者代码如下所示:
进口boto3
导入json
导入csv
从日期时间导入日期时间
导入日历
导入时间
随机输入
读取CSV并另存为json文件
csvFilePath=062019.csv
jsonFilePath=output.json
数据=[]
打开csvFilePath作为csvFile时:
csvReader=csv.dictReadercsv文件
使用openjsonFilePath,w作为jsonfile:
对于csvReader中的csvRow:
jsonfile.writejson.dumpscsvRow+\n
打印数据
将数据放入运动学
my_stream_name='ApacityTeamtStorderstream'
动情\客户=boto3.客户'动情',地区\名称='us-east-1'
打开'output.json','r'作为文件:
对于文件中的行:
put\u response=kinesis\u client.put\u记录
StreamName=我的\u流\u名称,
数据=行,
分区键=strrandom.randrange100
打印输出响应
消费者代码如下:
进口boto3
导入json
从日期时间导入日期时间
导入时间
my_stream_name='ApacityTeamtStorderstream'
动情\客户=boto3.客户'动情',地区\名称='us-east-1'
response=kinesis\u client.description\u streamname=my\u stream\u name
my_shard_id=响应['StreamDescription']['shard'][0]['ShardId']
shard\u iterator=kinisis\u client.get\u shard\u iterator
StreamName=我的\u流\u名称,
ShardId=my_shard_id,
ShardIteratorType='LATEST'
my_shard_迭代器=shard_迭代器['ShardIterator']
record\u response=kinesis\u client.get\u recordsShardIterator=my\u shard\u iterator,Limit=2
打印记录\u响应
记录_响应中的“NextSharedIterator”时:
record_response=kinesis_client.get_recordsShardIterator=record_response['NextShardIterator',Limit=2
if record_响应['Records']:
打印记录\u响应
但是我得到了一张唱片的结果。有人能帮我吗
需要使用PUT记录吗
现在需要逐行获取生产者数据,分区键用作PartitionKey=strrandom.randrange100
当我运行consumer时,我应该将输出作为所有记录。
我已收到@john Rotenstein的帮助,非常感谢,请帮助我获得所需结果的确切方式。您的代码需要如下所示: 进口boto3 导入json 随机输入 my_stream_name='ApacityTeamtStorderstream' 动情\客户=boto3.客户'动情',地区\名称='us-east-1' 打开'foo.json','r'作为文件: 对于文件中的行: put\u response=kinesis\u client.put\u记录 StreamName=我的\u流\u名称, 数据=行, 分区键=strrandom.randrange100 如果不希望将整行存储在Kinesis中,则需要提取与问题中的代码类似的所需记录
请注意,我在PartitionKey中输入了一个随机数。如果不需要以特定方式使用记录,则这是常见的做法。但是,如果给定字段的记录需要由同一使用者使用,则将该字段放在PartitionKey中。如果没有意义,请参阅:应用程序在哪里获取数据?或者那部分工作正常,而你只是想让它工作起来?目前是否产生了任何错误?这是你写的代码吗?如果是,你能解释一下while部分吗?它似乎在做一个发送相同数据的无限循环。我使用代码进行测试,因为我对kinesis非常陌生,想检查“while”是如何工作的。但是现在我需要帮助来阅读上面的json文件以发布到kinesis。有什么帮助吗?JSON文件在哪里?它只是磁盘上的一个文本文件吗?如果是这样的话,您的第一步将是编写一些打开文件的代码,然后在文件中的每一行循环。从简单地将行打印到屏幕开始。一旦你有工作,添加你的put_记录代码。如果您有问题,请随意编辑您的问题,以显示更新的代码,并让我们知道您遇到了什么问题。Json文件在我的办公桌上…让我尝试您建议的方式,并通过结果让您知道我编写了一个类似以下代码data={}abc=openoutput.Json,“r”test_file=json.loadabc for test_file中的测试:printtest printdatai运行该命令,但收到如下错误消息:发生异常:ParamValidationError参数验证失败:输入中缺少必需参数:记录输入中的未知参数:数据中的参数,必须是:记录之一,input:PartitionKey中的StreamName未知参数必须是:Records,StreamName中的一个。是否确实使用上述代码?听起来您使用的是put_记录,而不是put_记录。哦,PartitionKey需要是一个字符串,所以我在.T上面做了一个小的更新
汉克斯·约翰。我能看到它在跑。但显示空列表。[]{'ShardId':'ShardId-000000000000','SequenceNumber':'4960311605855234158516109786525243807500873773403138','ResponseMetadata':{'RequestId':'dc173846-6fc2-a0ed-8b7d-9bdafb9cc987','HTTPStatusCode':200,'HTTPHeaders':{'x-amzn-requestid':'dc173846-6fc2-a0ed-8b7d-9bdafb9cc987','x-amz-id-2':'Y3YX5VH9JQCPT5YZA0EF7XDDI9XNTF8CSCMDSMTSM19K/wkJL9w7DXt/xcG35N+WLWXAJY5YAGDIH5UTZAKPRRCBIUM3LA6P','date','date','Mon,June 2020 12:17:32','content type':'application/x-amz-json-1.1.1','content-length','110}'printput_响应来自您的原始代码。我已经删除了它。记录应该在Kinesis中,所以您的下一个任务是让一个进程使用Kinesis中的记录。谢谢John,我在运行consumer文件时得到了结果。但是在producer文件中,我使用了put record而不是“records”,那么如何更改它呢?当我死记硬背记录,我犯了错误。