python - 如何从 csv 文件中的一行读取 JSON 字符串?
问题描述
我是 MapReduce 和 MRjob 的新手,我正在尝试读取我想在 python 中使用 MRjob 处理的 csv 文件。但它有大约 5 列 JSON 字符串(例如 {})或 JSON 字符串数组(例如 [{},{}]),其中一些是嵌套的。
到目前为止,我的映射器如下所示:
from mrjob.job import MRJob
import csv
from io import StringIO
class MRWordCount(MRJob):
def mapper(self, _, line):
l = StringIO(line)
reader = csv.reader(l) # returns a generator.
for cols in reader:
columns = cols
yield None, columns
我得到错误 -
_csv.Error:字段大于字段限制 (131072)
但这似乎发生了,因为我的代码也将 JSON 字符串分成单独的列(因为里面有逗号)。
我该如何做到这一点,以便不拆分 JSON 字符串?也许我忽略了什么?
或者,有没有其他方法可以让我用 MRjob 读取这个文件,让这个过程更简单或更干净?
解决方案
您的 JSON 字符串没有被引号字符包围,因此该字段中的每个逗号都会使 csv 引擎认为它是一个新列。看看这里您正在寻找的是quotechar
更改您的数据,以便您的 json 被一个特殊字符包围(默认为"
)并相应地调整您的 csv 阅读器
推荐阅读
- c# - 在 asp.net webforms 中回发后未调用我的函数
- elasticsearch - Elasticsearch 仅返回与 id 数组匹配的结果
- amazon-web-services - 将值从 CloudFormation 传递到 Swagger 文件
- javascript - 同步绘图
- spring-boot - 不同数据中心上的 Spring 和计划任务
- mathematical-optimization - SCIP 代码如何处理 SAT 问题?
- embedded - ppc32 和 ppc64 函数栈计算
- julia - 按第一列对 22x2 数组进行排序
- ruby - 为什么 Ruby 文件有 NoMethodError?
- java - 如果两个库的类具有相同的类和包名称以供内部使用