如何从 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相应地
我是 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相应地