小编sim*_*sim的帖子

lxml.etree 到 iterparse 请求响应(stream=True)

我有一个 Python 中的 SOAP 客户端接收响应,该响应在 SOAP 信封主体的一个元素中接收大量数据流(gzip 压缩文件,几 GB,机器的主内存不一定大到足以容纳它)。

因此,我需要将信息作为流进行处理,这是我在发布 SOAP 请求时指定的:

import requests
url     = 'xyz.svc'
headers = {'SOAPAction': X}
response = requests.post(url, data=payload, headers=headers, stream=True)
Run Code Online (Sandbox Code Playgroud)

为了使用 lxml.etree 解析信息(我必须首先从标头读取一些信息,然后处理正文中的字段,包括大文件元素),我现在想使用流来提供 iterparse:

from lxml import etree
context = etree.iterparse(response.raw, events = ('start', 'end'))
for event, elem in context:
    if event == 'start':
        if elem.tag == t_header:
            # process header
        if elem.tag == t_body:
            # TODO: write element text to file, rely on etree to not load into memory?
    else:
        # do …
Run Code Online (Sandbox Code Playgroud)

python lxml python-requests

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

在 xlwings 中创建和命名表

我试图xlwings从我的一些 Python 代码中使用Excel 接口,但不幸的是,只找到了有关访问/重新格式化现有Excel 表格的stackoverflow 线程或文档,而不是从头开始创建新表格。

编辑:根据 David Zemen 的回答添加的解决方案(此处提供了 ListObject 属性的其他 getter 和 setter 。

import xlwings

df = ... # initialising some pandas DataFrame

book = xlwings.Book()
ws = book.sheets.active
ws.range("A1").options(index=False).value = df

# TODO: Create table
# downside: does not seem to be possible to define multiple tables
#           within a Sheet (based on explicit ranges)
tbl = ea_sheet.api.ListObjects.Add(1) 


# TODO: Set the name/formatting of the table
tbl.DisplayName = "tabname"  # …
Run Code Online (Sandbox Code Playgroud)

python excel xlwings

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

HDFS配置&用户目录是什么?

我目前在VM中使用Hadoop"玩游戏"(来自cloudera的CDH4.1.3图像).我想知道的是以下内容(文档在这方面并没有真正帮助我).

在本教程之后,我将首先格式化NameNode - 好的,如果使用了cloudera图像,则已经完成了.同样,HDFS文件结构已经存在.在hdfs-site.xml中,datanode数据目录设置为:

/var/lib/hadoop-hdfs/cache/${user.name}/dfs/data
Run Code Online (Sandbox Code Playgroud)

这显然是应该在真实的分布式设置中复制块的地方.在cloudera教程中,有人告诉我们为每个用户(/users/<username>)创建hdfs"主目录" ,我不明白它们的用途.它们仅用于单节点设置中的本地测试运行吗?假设我真的有数PB的数据类型不适合我的本地存储.这些数据必须立即分发,使本地"主目录"完全无用.

有人能告诉我,只是为了给我一个直觉,一个真正的Hadoop工作流程如何看起来像大量数据?我一开始会运行什么样的不同节点?

主机(JobTracker)有其从属文件(我将把它放在哪里),允许主机解析所有数据节点.然后是我的NameNode,它跟踪块ID的存储位置.DataNodes也承担TaskTracker的责任.在配置文件中,包含NameNode的URI - 到目前为止我是否正确?然后${user.name}在配置中仍然存在变量,显然,如果我理解正确的话,它与WebHDFS有关,如果有人能向我解释,那也很好.在运行的示例中,方向往往是硬编码的

/var/lib/hadoop-hdfs/cache/1/dfs/data, /var/lib/hadoop-hdfs/cache/2/dfs/data and so on.
Run Code Online (Sandbox Code Playgroud)

所以,回到示例:说,我有我的磁带,并希望将数据导入我的HDFS(我需要将数据流式传输到文件系统,因为我缺少本地存储将其本地保存在一台机器上).我从哪里开始迁移过程?在任意DataNode上?在分配块的NameNode上?毕竟,我不能假设数据只是"在那里",因为名称节点必须知道块ID.

如果有人能够在短期内详细阐述这些主题,那就太好了:

  1. 真正的主目录是什么?
  2. 我是先将数据迁移到主目录,然后再迁移到真正的分布式系统吗?
  3. WebHDFS如何工作以及它对user.name变量有何作用
  4. 我如何动态地将"大数据"迁移到我的HDFS中 - 或者即使它不是大数据,我如何以适当的方式填充我的文件系统(意味着,块在整个群集中随机分布?

hadoop hdfs

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

标签 统计

python ×2

excel ×1

hadoop ×1

hdfs ×1

lxml ×1

python-requests ×1

xlwings ×1