我的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)
readData函数:
def readPointBatch(iterator):
return [(np.loadtxt(iterator,dtype=np.float64)]
numpy
在这里真的是个问题?如果你读取文件并只是在空格上分割data = sc.textFile("s3_url").map(str.split)
,它会显著地更快吗? - zero323