小编Spa*_*man的帖子

如何减少PhantomJS的CPU和内存使用量?

我通过Python的webdriver lib使用PhantomJS.它占用了大量的RAM和CPU,这是一个问题,因为我想运行尽可能多的实例.

一些谷歌没有给我任何帮助.所以我会直接问:

  1. 尺寸重要吗?如果我设置driver.set_window_size(1280,1024),它会占用比1024x768更多的内存吗?

  2. 源代码中是否有任何选项可以在没有实际问题的情况下关闭,从而导致显着的内存使用量减少?是的我仍然需要图像和CSS和JS加载和应用,但我可以摆脱一些其他功能...例如,我可以关闭缓存(并每次加载所有媒体文件).是的,我确实需要加快速度并减少它的贪婪,我准备重新编译它......这里有什么想法吗?

非常感谢!

phantomjs

9
推荐指数
1
解决办法
4244
查看次数

Scrapy:使用特定的HTTP服务器代码捕获响应

我们有一个非常标准的Scrapy项目(Scrapy 0.24).

我想捕获特定的HTTP响应代码,例如200,500,502,503,504等.

像这样的东西:

class Spider(...):

    def parse(...):
        processes HTTP 200

    def parse_500(...):
        processes HTTP 500 errors

    def parse_502(...):
        processes HTTP 502 errors

    ...
Run Code Online (Sandbox Code Playgroud)

我们怎么做?

python scrapy web-scraping scrapy-spider

9
推荐指数
1
解决办法
2723
查看次数

如何读取一个大的二进制文件并通过一些标记分割其内容

在Python中,逐行读取大文本文件很简单:

for line in open('somefile', 'r'): ...
Run Code Online (Sandbox Code Playgroud)

但是如何读取二进制文件并通过某个给定的标记"分割"(通过生成器)其内容,而不是换行符'\n'?

我想要这样的东西:

content = open('somefile', 'r').read()
result = content.split('some_marker')
Run Code Online (Sandbox Code Playgroud)

但是,当然,内存效率高(文件大约70GB).当然,我们无法通过每个字节读取文件(由于HDD的性质,它会太慢).

"块"长度(这些标记之间的数据)可能不同,理论上从1字节到兆字节.

因此,举一个例子来总结,数据看起来像那样(这里的数字是指字节,数据是二进制格式):

12345223-MARKER-3492-MARKER-34834983428623762374632784-MARKER-888-MARKER-...
Run Code Online (Sandbox Code Playgroud)

有没有简单的方法可以做到这一点(没有实现大块读取,拆分块,记住尾巴等)?

python

8
推荐指数
2
解决办法
1万
查看次数

MAP(PySpark)返回的元组的列表(或迭代器)

我有一个mapper方法:

def mapper(value):
    ...
    for key, value in some_list:
        yield key, value
Run Code Online (Sandbox Code Playgroud)

实际上,我需要的是与普通的wordcount示例相差不远.我已经有了工作脚本,但只有当mapper方法看起来像这样:

def mapper(value):
    ...
    return key, value
Run Code Online (Sandbox Code Playgroud)

这就是它的调用方式:

sc.textFile(sys.argv[2], 1).map(mapper).reduceByKey(reducer).collect()
Run Code Online (Sandbox Code Playgroud)

我花了2个小时尝试编写支持mapper生成器的代码.但不能这样做.我甚至同意只返回一份清单:

def mapper(value):
    ...
    result_list = []
    for key, value in some_list:
        result_list.append( key, value )
    return result_list
Run Code Online (Sandbox Code Playgroud)

在这里:https://groups.google.com/forum/#!searchin/spark-users/flatmap $ 20multiple/spark-users/1WqVhRBaJsU/-D5QRbenlUgJ我发现我应该使用flatMap,但它没有做到这一点 - 然后我的reducer开始得到像(key1,value1,key2,value2,value3,...)这样的输入 - 但它应该是[(key1,value1),(key2,value2,value3)...].换句话说,reducer开始只使用单个部分,并且不知道它是值还是键,以及值是否 - 它属于哪个键.

那么如何使用返回迭代器或列表的映射器呢?

谢谢!

python apache-spark

7
推荐指数
1
解决办法
2万
查看次数

Django .all() 之后的 .delete() 方法

想象一下 2 行:

Model.objects.all().delete()
Run Code Online (Sandbox Code Playgroud)

Model.objects.delete()
Run Code Online (Sandbox Code Playgroud)

执行流程有什么区别吗?数据库服务器是Mysql(Amazon RDBMS)。

第一行是不是先加载所有的对象,然后一个一个的删除呢?或者将执行“截断”命令?

而且,最重要的是- 如果第一行在执行过程中由于某些原因被中断怎么办?例如,我们有一个包含很多记录的大表。如果我们执行第一行并且脚本将被终止 - 这是否意味着某些记录将被删除,而某些记录将被删除?

谢谢你!

django django-orm

6
推荐指数
2
解决办法
5349
查看次数

存储数百万个阵列的高效方法,并执行IN检查

大约有300万个数组 - 或Python列表\元组(并不重要).每个数组由以下元素组成:

['string1', 'string2', 'string3', ...]  # totally, 10000 elements
Run Code Online (Sandbox Code Playgroud)

这些数组应存储在某种键值存储中.我们现在假设这是一个Python的词典,只是为了一个简单的解释.

所以,3百万个密钥,每个密钥代表一个10000个元素的数组.

列出\元组或任何其他自定义的东西 - 它并不重要.重要的是数组应该包含字符串 - utf8或unicode字符串,每个字符串从5到50个字符.还有大约300万个可能的字符串.如果确实需要,可以用整数替换它们,但为了更有效的进一步操作,我宁愿有字符串.

虽然很难给你一个完整的数据描述(它很复杂和奇怪),但它类似于同义词 - 我们假设我们有3百万个单词 - 作为dict键 - 和每个单词的10k个同义词 - 或元素的清单.

像那样(不是真正的同义词,但它会给你一个想法):

{
    'computer': ['pc', 'mac', 'laptop', ...],  # (10k totally)
    'house': ['building', 'hut', 'inn', ...],  # (another 10k)
     ...
}
Run Code Online (Sandbox Code Playgroud)

元素 - "同义词" - 可以根据需要进行排序.

之后,在填充数组之后,有一个循环:我们通过所有键并检查是否有一些var在其值中.例如,用户输入"计算机"和"笔记本电脑"这两个词 - 如果"笔记本电脑"这个词是"计算机"这个词的同义词,我们必须快速回复.这里的问题是我们必须检查数百万次,大约2000万左右.想象一下,我们有很多用户输入一些随机词 - "电脑"和"汽车","手机"和"建筑物"等等.他们可能"匹配",或者他们可能"匹配".

所以,简而言之 - 我需要的是:

  • 有效地存储这些数据结构,
  • 能够快速检查某个项目是否在数组中.

我应该能够将内存使用量保持在30GB以下.此外,我应该能够在不到10个小时的时间内在Xeon CPU上执行所有迭代.

可以得到大约0.1%的错误答案 - 无论是积极的还是消极的 - 虽然减少它们或者根本没有它们会更好.

这里最好的方法是什么?算法,代码链接,任何东西都非常感激.另外 - 我的一个朋友建议在这里使用布隆过滤器或marisa尝试 - 他是对的吗?我没有和他们一起工作.

python arrays algorithm

6
推荐指数
1
解决办法
1399
查看次数

Hadoop\HDFS:"没有这样的文件或目录"

我使用本教程在一台机器上安装了Hadoop 2.2:http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-single-node-cluster/

一些细节有点改变 - 例如,我使用java 8,/ hadoop root dir等用户,SSH,配置密钥 - 相同.

Namenode已成功格式化:

13/12/22 05:42:31 INFO common.Storage: Storage directory /hadoop/tmp/dfs/name has been successfully formatted.
13/12/22 05:42:31 INFO namenode.FSImage: Saving image file /hadoop/tmp/dfs/name/current/fsimage.ckpt_0000000000000000000 using no compression
13/12/22 05:42:32 INFO namenode.FSImage: Image file /hadoop/tmp/dfs/name/current/fsimage.ckpt_0000000000000000000 of size 198 bytes saved in 0 seconds.
13/12/22 05:42:32 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
13/12/22 05:42:32 INFO util.ExitUtil: Exiting with status 0
13/12/22 05:42:32 INFO namenode.NameNode: SHUTDOWN_MSG: 
Run Code Online (Sandbox Code Playgroud)

但是,'mkdir'甚至都没有'ls'命令工作:

$ …
Run Code Online (Sandbox Code Playgroud)

hadoop hdfs

5
推荐指数
2
解决办法
2万
查看次数

Scrapyd无法在子目录中找到代码

我们有一个非常正常的Scrapy项目,类似于:

project/
       setup.py
       scrapy.cfg
       SOME_DIR_WITH_PYTHON_MODULE/
                                  __init__.py
       project/
              settings.py
              pipelines.py
              __init__.py
              spiders/
                     __init__.py
                     somespider.py
Run Code Online (Sandbox Code Playgroud)

如果我们从命令行运行它,一切都很好 scrapy crawl somespider...

但是当我们部署它并使用Scrapyd运行时,它无法从SOME_DIR_WITH_PYTHON_MODULE导入代码.看起来它没有看到那里的代码由于一些未知的原因.

我们尝试在pipelines.py文件中导入它.试过这样的事:

from project.SOME_DIR_WITH_PYTHON_MODULE import *

和那样:

from SOME_DIR_WITH_PYTHON_MODULE import *

......没有任何效果.虽然它可以使用scrapy crawl从命令行"直接"执行运行.

我们该怎么做才能让它发挥作用?

谢谢!

scrapy scrapyd

5
推荐指数
1
解决办法
208
查看次数

Scrapy持久缓存

我们需要能够重新抓取历史数据。想象一下今天是 6 月 23 日。我们今天抓取了一个网站,但几天后我们意识到我们必须重新抓取它,“看到”它与 23 日一模一样。这意味着,包括所有可能的重定向、GET 和 POST 请求等。无论如何,蜘蛛看到的所有页面都应该与 23 日完全相同。

用例:如果网站发生变化,并且我们的蜘蛛无法抓取某些内容,我们希望能够回到“过去”并在修复它后重新运行蜘蛛。

一般来说,这应该很容易 - 子类化标准 Scrapy 的缓存,强制它使用子文件夹的日期,并具有类似的内容:

cache/spider_name/2015-06-23/HERE ARE THE CACHED DIRS

但当我尝试这个时,我意识到有时蜘蛛会爬行实时网站。这意味着,它不会从缓存中获取某些页面(尽管磁盘上存在适当的文件),而是从实时网站中获取它们。这种情况尤其发生在带有验证码的页面上,但也可能发生在其他一些页面上。

我们如何强制 Scrapy始终从缓存中获取页面,而不访问实时网站?理想情况下,它甚至应该在没有互联网连接的情况下工作。

更新:我们使用了虚拟策略和 HTTPCACHE_EXPIRATION_SECS = 0

谢谢你!

caching scrapy

5
推荐指数
1
解决办法
1703
查看次数

(PySpark)reduceByKey之后的嵌套列表

我确信这很简单,但我找不到与此有关的任何内容.

我的代码很简单:

... 
stream = stream.map(mapper) 
stream = stream.reduceByKey(reducer) 
... 
Run Code Online (Sandbox Code Playgroud)

没什么特别的.毕竟,输出看起来像这样:

... 
key1  value1 
key2  [value2, value3] 
key3  [[value4, value5], value6] 
... 
Run Code Online (Sandbox Code Playgroud)

等等.所以,有时我得到一个平坦的值(如果它是单一的).有时 - 嵌套列表可能非常非常深(在我的简单测试数据上它是3级深度).

我尝试通过源搜索"flat"之类的东西 - 但是只找到了flatMap方法(据我所知)并不是我需要的方法.

我不知道为什么这些列表是嵌套的.我的猜测是,它们是由不同的流程(工人?)处理的,然后在没有展平的情况下连接在一起.

当然,我可以用Python编写一个代码,它将展开该列表并将其展平.但我认为这不是一个正常的情况 - 我认为几乎每个人都需要一个平坦的输出.

itertools.chain停止在第一个找到的非可迭代值上展开.换句话说,它仍然需要一些编码(前一段).

那么 - 如何使用PySpark的本地方法展平列表?

谢谢

python apache-spark

3
推荐指数
1
解决办法
9791
查看次数

D lang中的Map-reduce框架

寻找用D编写的任何map-reduce框架(即使是最小的框架).

有没有什么?

谢谢.

d mapreduce

3
推荐指数
1
解决办法
304
查看次数

在解码GZIP和解析JSON时,为什么Julia会变慢?

以下脚本逐行读取gzip文件并解码JSON对象

Pkg.add("GZip")
Pkg.add("JSON")


using GZip
using JSON

stream = GZip.gzopen(Base.ARGS[1])

_started = time()

i = 0

for line in eachline(stream)
    _j = JSON.parse(line)

    if i % 10000 == 0
        println(time()-_started)
    end

    i += 1

    try
        key_id = _j["some_id"]
    except
        pass
    end
end
Run Code Online (Sandbox Code Playgroud)

输出:

0.7071459293365479
20.09155511856079
37.8870849609375
Run Code Online (Sandbox Code Playgroud)

与Python比较:

import os
import sys
import gzip
import datetime

import ujson as json

_started = datetime.datetime.now()

fh = gzip.open(sys.argv[1])
for i, line in enumerate(fh):

    if i % 10000 == 0:
        print datetime.datetime.now() - _started …
Run Code Online (Sandbox Code Playgroud)

python benchmarking julia

2
推荐指数
1
解决办法
995
查看次数