小编B.M*_*.W.的帖子

Python 线程标准输入/标准输出

我有一个包含大量数据的文件。每一行都是一条记录。我正在尝试对整个文件做一些 ETL 工作。现在我正在使用标准输入逐行读取数据。很酷的一点是您的脚本可以非常灵活地与其他脚本和 shell 命令集成。我将结果写入标准输出。例如。

$ cat input_file
line1 
line2
line3
line4
...
Run Code Online (Sandbox Code Playgroud)

我当前的 python 代码看起来像这样 - parse.py

import sys
for line in sys.stdin:
    result = ETL(line)    # ETL is some self defined function which takes a while to execute.
    print result
Run Code Online (Sandbox Code Playgroud)

下面的代码是它现在的工作方式:

cat input_file | python parse.py > output_file
Run Code Online (Sandbox Code Playgroud)

我查看了 Python 的 Threading 模块,我想知道如果我使用该模块,性能是否会得到显着提高。

问题1:我应该如何规划每个线程的配额,为什么?

...
counter = 0
buffer = []
for line in sys.stdin:
    buffer.append(line)
    if counter % 5 == 0:   # maybe assign 5 rows …
Run Code Online (Sandbox Code Playgroud)

python multithreading stdin stdout

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

Python"R Cut"功能

我想知道Python中是否已经为我后面描述的目标编写了一个函数.如果没有,那么最简单的实施方式是什么.我的代码已附上.

假设我的范围是1到999999999.给出这样的数字列表:

[9, 44, 99]
Run Code Online (Sandbox Code Playgroud)

它会回来

[(1,9), (10,44), (45,99), (100, 999999999)]
Run Code Online (Sandbox Code Playgroud)

如果作为限制的数字包含在输入数字中,它也应该处理.说输入是

[1, 9, 44, 999999999]
Run Code Online (Sandbox Code Playgroud)

回报应该是:

[(1,9), (10,44), (45, 999999999)]
Run Code Online (Sandbox Code Playgroud)

我可以写一个for循环与一些条件语句比较,但想知道是否有更"智能的方式".

一些可能有帮助的数据按摩:

points = [1, 9, 44, 99]
points = sorted(list(set(points + [1, 999999999])))
Run Code Online (Sandbox Code Playgroud)

更新信息:给予alecxe的最终信用,感谢您鼓舞人心的列表理解解决方案

l = sorted(list(set(points + [1, 999999999])))
[(l[i] + int(i != 0), l[i + 1]) for i in xrange(len(l) - 1)]
Run Code Online (Sandbox Code Playgroud)

你可以将所有这些放在一行中,但我认为这是不合情理的.

python intervals

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

Scrapy XPath页面上的所有链接

我正在尝试使用Scrapy收集域下的所有URL。我试图使用CrawlSpider从首页开始抓取他们的网站。对于每个页面,我想使用Xpath提取所有href。并以键/值对之类的格式存储数据。

密钥:当前网址值:此页面上的所有链接。

class MySpider(CrawlSpider):
    name = 'abc.com'
    allowed_domains = ['abc.com']
    start_urls = ['http://www.abc.com']

    rules = (Rule(SgmlLinkExtractor()), )
    def parse_item(self, response):
        hxs = HtmlXPathSelector(response)
        item = AbcItem()
        item['key'] = response.url 
        item['value'] = hxs.select('//a/@href').extract()
        return item 
Run Code Online (Sandbox Code Playgroud)

我定义我的AbcItem()如下所示:

从scrapy.item导入项目,字段

class AbcItem(Item):

    # key: url
    # value: list of links existing in the key url
    key = Field()
    value = Field()
    pass
Run Code Online (Sandbox Code Playgroud)

当我像这样运行我的代码时:

nohup scrapy crawl abc.com -o output -t csv &
Run Code Online (Sandbox Code Playgroud)

机器人似乎开始爬行,我可以看到所有配置日志都在填充nohup.out文件,但是输出文件中没有信息。这是我要收集的内容,有人可以帮助我吗?我的机器人可能出了什么问题?

python xpath scrapy

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

使用 Python 读取 AVRO 文件

我有一个 AVRO 文件(由 JAVA 创建),它似乎是用于 hadoop/mapreduce 的某种压缩文件,我想将它“解压缩”(反序列化)为一个平面文件。每行每条记录。

我了解到python有一个AVRO包,我正确安装了它。并运行示例读取 AVRO 文件。但是,它出现了下面的错误,我想知道阅读最简单的例子是怎么回事?谁能帮我解释下面的错误。

>>> reader = DataFileReader(open("/tmp/Stock_20130812104524.avro", "r"), DatumReader())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/.../python2.7/site-packages/avro/datafile.py", line 240, in __init__
    raise DataFileException('Unknown codec: %s.' % self.codec)
avro.datafile.DataFileException: Unknown codec: snappy.
Run Code Online (Sandbox Code Playgroud)

顺便说一句,如果我做文件的“头部”,并使用 VI 打开 AVRO 文件的前几行,我可以看到模式定义和一些蹩脚的奇怪字符 - 可能是压缩内容。原始 AVRO 文件的起始位如下所示:

bj^A^D^Tavro.codec^Lsnappy^Vavro.schemaØ${"type":"record","name":"Stoc...
Run Code Online (Sandbox Code Playgroud)

我不知道读取 AVRO 文件是否需要这些模式,如下所示:

schema = avro.schema.parse(open("schema").read())
# include schema to do sth...
reader = DataFileReader(open("Stock_20130812104524.avro", "r"), DatumReader())
Run Code Online (Sandbox Code Playgroud)

提前致谢。

python java mapreduce avro

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

Python列表按日期分组

说我有一个列表看起来像这样:

[(datetime.datetime(2013, 8, 8, 1, 20, 15), 2060), (datetime.datetime(2013, 8, 9, 1, 6, 14), 2055), (datetime.datetime(2013, 8, 9, 1, 21, 1), 2050), (datetime.datetime(2013, 8, 10, 1, 5, 49), 2050), (datetime.datetime(2013, 8, 10, 1, 19, 51), 2050), (datetime.datetime(2013, 8, 11, 2, 4, 53), 2050), (datetime.datetime(2013, 8, 12, 0, 29, 45), 2050), (datetime.datetime(2013, 8, 12, 0, 44, 13), 2050), (datetime.datetime(2013, 8, 13, 0, 34, 13), 2050), (datetime.datetime(2013, 8, 13, 0, 47, 29), 2050), (datetime.datetime(2013, 8, 14, 1, 30, 39), 2050), (datetime.datetime(2013, 8, …
Run Code Online (Sandbox Code Playgroud)

python timestamp date list python-itertools

4
推荐指数
1
解决办法
4731
查看次数

HIVE分隔符\n ^ M问题

我有一个文件,其列由^ A分隔,行由'\n'换行符号.

我首先将它上传到HDFS,然后使用如下命令在Hive中创建表:

CREATE EXTERNAL TABLE 
IF NOT EXISTS 
html_sample 
( ts string, 
  url string, 
  html string) 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY '\001' 
LINES TERMINATED BY '\n' 
LOCATION '/tmp/directoryname/';
Run Code Online (Sandbox Code Playgroud)

但是,当我为该表执行select语句时.结果是一团糟.

该表如下所示:

ts              url                    html
10082013        http://url.com/01      <doctype>.....style="padding-top: 10px;
text-align...   NULL                   NULL 
text-align...   NULL                   NULL
text-align...   NULL                   NULL
10092013        http://url.com/02      <doctype>.....style="padding-top: 10px;
text-align...   NULL                   NULL 
text-align...   NULL                   NULL
text-align...   NULL                   NULL
Run Code Online (Sandbox Code Playgroud)

然后我回到文本文件,发现文件中存在几个^ M字符,这使得HIVE将^ M视为新行字符.

当我第一次创建文件时,我故意从html中删除所有新行字符,以保证每条记录都是一行.但是,我只是无法理解HIVE如何将^ M视为换行符.如何在不修改文件的情况下解决这个问题.

(我知道有可能在VI或sed中进行全局替换......但它对我来说没有多大意义,HIVE如何将^ M视为\n)

vi hadoop hive newline sed

4
推荐指数
1
解决办法
7345
查看次数

Python Suds.Client应该关闭还是不关闭

我正在使用该suds软件包从一个网站发出API请求.我写了一个功能,打开了client网站并提出请求.

我想知道我应该如何或在功能结束时如何终止连接?

我想知道是否会clientMySQLDb.connect实际打开许多单独的API连接,每次调用此函数时都不会关闭.

from suds.client import Client
import sys, re

def querysearch(reqPartNumber, reqMfg, lock):
    try:
        client = Client('http://app....')
        userInfo = {'id':.., 'password':...}
        apiResponse = client.service.getParts(...)
        ...
        print apiResponse
    except:
        ...
Run Code Online (Sandbox Code Playgroud)

python api suds

4
推荐指数
1
解决办法
1762
查看次数

Python Virtualenv检查环境

我正在编写一个需要使用启动服务的bash脚本virtualenv.我想我的bash脚本看起来像这样:

#!/bin/bash
source /root/user/python-ev/bin/activate
IPYTHON_OPTS="notebook --port 8889 --profile pyspark" pyspark --master spark://701.datafireball.com:7077
Run Code Online (Sandbox Code Playgroud)

但是,我想在之间添加一行activate,IPYTHON...以确保环境已被激活.shell中是否有环境变量/命令可以告诉我是否在virtualenv中,如果是,是哪一个?

我可以硬编码打印python路径,如果我在virtualenv中,它应该指向一个自定义的python解释器,但我不确定这是否是正确的方法.

谢谢!

python bash virtualenv

4
推荐指数
1
解决办法
2310
查看次数

Hive从Double转换为String不是科学的

我有一个列双列类型的表,我试图将其从double转换为字符串.

但是,当我使用cast命令时,它"巧妙地"将其转换为科学记数法.如下:

select 
    number, 
    cast(number as string), 
from ...
Run Code Online (Sandbox Code Playgroud)

看起来像

number     c1_
9999999902  9.999999902E9
9999999902  9.999999902E9
9999999902  9.999999902E9
9999999902  9.999999902E9
9999999909  9.999999909E9
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我如何避免将其转化为科学并保留原始文本?

hive

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

Tensorflow LinearRegressor功能不能具有等级0

我正在按照教程进行操作,但无法为在其上生成的数据集构建线性回归量y=x.这是我的代码的最后一部分,如果你想重现我的错误,你可以在这里找到完整的源代码:

_CSV_COLUMN_DEFAULTS = [[0],[0]]
_CSV_COLUMNS = ['x', 'y']

def input_fn(data_file):

    def parse_csv(value):
        print('Parsing', data_file)
        columns = tf.decode_csv(value, record_defaults=_CSV_COLUMN_DEFAULTS)
        features = dict(zip(_CSV_COLUMNS, columns))
        labels = features.pop('y')
        return features, labels

    # Extract lines from input files using the Dataset API.
    dataset = tf.data.TextLineDataset(data_file)
    dataset = dataset.map(parse_csv)

    iterator = dataset.make_one_shot_iterator()
    features, labels = iterator.get_next()
    return features, labels

x = tf.feature_column.numeric_column('x')
base_columns = [x]

model_dir = tempfile.mkdtemp()
model = tf.estimator.LinearRegressor(model_dir=model_dir,     feature_columns=base_columns)

model = model.train(input_fn=lambda: input_fn(data_file=file_path))
Run Code Online (Sandbox Code Playgroud)

不知何故,此代码将失败并显示错误消息

ValueError: Feature (key: x) …
Run Code Online (Sandbox Code Playgroud)

python tensorflow

4
推荐指数
1
解决办法
2074
查看次数