我正在读取python 2.7中的800 GB xml文件,并使用etree迭代解析器解析它.
目前,我只使用open('foo.txt')没有缓冲参数.我有点困惑这是我应该采取的方法,还是我应该使用缓冲参数或使用io中的东西,如io.BufferedReader或io.open或io.TextIOBase.
正确方向的一点将非常感激.
我有一些数据要按特定列分组,然后根据组中的滚动时间窗口聚合一系列字段.
以下是一些示例数据:
df = spark.createDataFrame([Row(date='2016-01-01', group_by='group1', get_avg=5, get_first=1),
Row(date='2016-01-10', group_by='group1', get_avg=5, get_first=2),
Row(date='2016-02-01', group_by='group2', get_avg=10, get_first=3),
Row(date='2016-02-28', group_by='group2', get_avg=20, get_first=3),
Row(date='2016-02-29', group_by='group2', get_avg=30, get_first=3),
Row(date='2016-04-02', group_by='group2', get_avg=8, get_first=4)])
Run Code Online (Sandbox Code Playgroud)
我想分组group_by,然后创建时间窗口,从最早的日期开始,并延长到30天没有该组的条目.在这30天结束后,下一个时间窗口将从下一行的日期开始,该日期不会落在上一个窗口中.
然后我想聚合,例如获得平均值get_avg和第一个结果get_first.
所以这个例子的输出应该是:
group_by first date of window get_avg get_first
group1 2016-01-01 5 1
group2 2016-02-01 20 3
group2 2016-04-02 8 4
Run Code Online (Sandbox Code Playgroud)
编辑:对不起我意识到我的问题没有正确指定.我实际上想要一个在30天不活动后结束的窗口.我相应地修改了示例的group2部分.
我正在尝试解码一个大的utf-8 json文件(2.2 GB).我这样加载文件:
f = codecs.open('output.json', encoding='utf-8')
data = f.read()
Run Code Online (Sandbox Code Playgroud)
如果我尝试做任何:json.load,json.loads或者json.JSONDecoder().raw_decode我得到错误:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-40-fc2255017b19> in <module>()
----> 1 j = jd.decode(data)
/usr/lib/python2.7/json/decoder.pyc in decode(self, s, _w)
367 end = _w(s, end).end()
368 if end != len(s):
--> 369 raise ValueError(errmsg("Extra data", s, end, len(s)))
370 return obj
371
ValueError: Extra data: line 1 column -2065998994 - line 1 column 2228968302
(char -2065998994 - 2228968302)
Run Code Online (Sandbox Code Playgroud)
uname -m节目x86_64和 …