首页 > 解决方案 > 如何从 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 读取这个文件,让这个过程更简单或更干净?

标签: pythonjsoncsvmapreducemrjob

解决方案


您的 JSON 字符串没有被引号字符包围,因此该字段中的每个逗号都会使 csv 引擎认为它是一个新列。看看这里您正在寻找的是quotechar更改您的数据,以便您的 json 被一个特殊字符包围(默认为")并相应地调整您的 csv 阅读器


推荐阅读