如何从 csv 文件中的一行读取 JSON 字符串?

How to read JSON string from a line in csv file?

我是 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: field larger than field limit (131072)

但这似乎发生了,因为我的代码也将 JSON 字符串分隔到单独的列中(因为里面有逗号)。

我该怎么做才能不拆分 JSON 字符串?也许我忽略了什么?

或者,是否有任何其他方法可以让我使用 MRjob 读取此文件,从而使此过程更简单或更清晰?

您的 JSON 字符串未被引号字符包围,因此该字段中的每个逗号都会使 csv 引擎认为它是一个新列。 看看 here 你要找的是 quotechar 改变你的数据,让你的 json 被一个特殊字符包围(默认是 ")并调整你的 csv reader相应地