gpt4 book ai didi

python - 在Hadoop中使用PySpark进行多处理

转载 作者:行者123 更新时间:2023-12-02 22:03:04 24 4
gpt4 key购买 nike

我当前的python脚本在下面,并以6个cpu内核在本地运行。

我可以将其转换为PySpark并在Hadoop集群中运行,在其中可以将cores指定为500吗?

我要下载一千个文件,因此我想启动尽可能多的并行进程。

另请注意,我的功能正在尝试连接到数据源并下载数据文件。

pool = Pool(cores=5)
pool.map(myfunction, arg_list)
pool.close()

def myfunction(args)
(url,account,password,output_file_name) = args
page = requests.get(url, auth=HTTPBasicAuth(account,password), timeout=None)
tables = lh.document_fromstring(page.content)
rows = tables.xpath('//table[@id="Report1_Grid1"]/tr')
body = [[td.text for td in rows[rowindex]] for rowindex in range(1, len(rows))]
tbl = pd.DataFrame(body)
pd.DataFrame.to_csv(output_file_name)

最佳答案

仅在Hadoop集群上运行它并不会真正改变任何东西。我在这里假设您当前正在运行的PC和群集位于同一网络中,而您要从中下载的服务器却不在同一网络中。然后,您可能会花费大部分时间等待字节实际通过网络到达,并且向其投入更多的计算能力不会改变任何内容。

如果您的下行链路已饱和,您将无法进行任何更改。如果您有多个位置(也许有多个数据中心),则可以在每个位置运行一个下载器,进行处理,然后在单个位置进行汇总。

如果服务器的上行链路有问题(或者服务器只是不想给您更多字节/秒),并且您想从多个服务器下载(或者服务器被“诱骗”以为您提供更多字节/秒),您有多个连接),您可以简单地运行更多请求,但是您实际上并不需要集群。仅增加您的池大小,在这种IO情况下,一个请求不会使一个cpu内核饱和。如果进程开销降低了性能,则可以尝试使用grequests之类的方法。

还可能发生的是您的网卡或插入的以太网电缆已饱和,但是您的网络实际上可以为您提供更多的下行链路。在那种情况下,在hadoop群集上运行实际上可以提高速度,但是将hadoop群集拖到实际不使用计算能力的位置并不是一件好事。只需找到一台(或2到3台)连接良好的服务器,然后从那里下载,可能就可以使用grequests或更大的服务器池。

关于python - 在Hadoop中使用PySpark进行多处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48330983/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com