我有一个包含大量数据的文件。每一行都是一条记录。我正在尝试对整个文件做一些 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中是否已经为我后面描述的目标编写了一个函数.如果没有,那么最简单的实施方式是什么.我的代码已附上.
假设我的范围是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)
你可以将所有这些放在一行中,但我认为这是不合情理的.
我正在尝试使用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文件,但是输出文件中没有信息。这是我要收集的内容,有人可以帮助我吗?我的机器人可能出了什么问题?
我有一个 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)
提前致谢。
说我有一个列表看起来像这样:
[(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) 我有一个文件,其列由^ 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)
我正在使用该suds软件包从一个网站发出API请求.我写了一个功能,打开了client网站并提出请求.
我想知道我应该如何或在功能结束时如何终止连接?
我想知道是否会client像MySQLDb.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) 我正在编写一个需要使用启动服务的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解释器,但我不确定这是否是正确的方法.
谢谢!
我有一个列双列类型的表,我试图将其从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)
任何人都可以告诉我如何避免将其转化为科学并保留原始文本?
我正在按照教程进行操作,但无法为在其上生成的数据集构建线性回归量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)