我有一个 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) 我试图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) 我目前在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.
如果有人能够在短期内详细阐述这些主题,那就太好了: