gpt4 book ai didi

python - Spark 创建 numpy 数组 RDD 的最快方法

转载 作者:行者123 更新时间:2023-11-30 09:21:23 27 4
gpt4 key购买 nike

我的 Spark 应用程序正在使用 numpy 数组的 RDD。
目前,我正在从 AWS S3 读取数据,其表示为一个简单的文本文件,其中每行都是一个向量,每个元素由空格分隔,例如:

1 2 3
5.1 3.6 2.1
3 0.24 1.333

我正在使用 numpy 的函数 loadtxt() 来从中创建一个 numpy 数组。
但是,这种方法似乎非常慢,并且我的应用程序花费了太多时间(我认为)将数据集转换为 numpy 数组。

你能建议我一个更好的方法吗?例如,我应该将数据集保留为二进制文件吗?我应该以其他方式创建 RDD 吗?

一些关于如何创建 RDD 的代码:

data = sc.textFile("s3_url", initial_num_of_partitions).mapPartitions(readData)

读取数据函数:

 def readPointBatch(iterator):
return [(np.loadtxt(iterator,dtype=np.float64)]

最佳答案

简单地使用numpy.fromstring进行映射会更惯用一点,也更快一点,如下所示:

import numpy as np.

path = ...
initial_num_of_partitions = ...

data = (sc.textFile(path, initial_num_of_partitions)
.map(lambda s: np.fromstring(s, dtype=np.float64, sep=" ")))

但忽略你的方法并没有什么特别错误的地方。据我所知,使用基本配置,它的速度大约是简单读取数据的两倍,并且比创建虚拟 numpy 数组稍慢。

看来问题出在其他地方。这可能是集群配置错误、从 S3 获取数据的成本,甚至是不切实际的期望。

关于python - Spark 创建 numpy 数组 RDD 的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36698882/

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