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

时间:2019-03-24 10:47:59

标签: python json csv mapreduce mrjob

我是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。错误:字段大于字段限制(131072)

但这似乎是发生的,因为我的代码也将JSON字符串也分成了单独的列(由于内部的逗号)。

如何做到这一点,以便不拆分JSON字符串?也许我正在忽略某些东西?

或者,我还有其他方法可以使用MRjob读取此文件吗?

1 个答案:

答案 0 :(得分:1)

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