【发布时间】:2015-11-19 12:45:01
【问题描述】:
我的 Spark 应用程序正在使用 RDD 的 numpy 数组。
目前,我正在从 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)]
【问题讨论】:
-
速度变慢的一个可能原因是您的文件未拆分。将您的输入剪切到 s3 上的多个文件中,并使用通配符在您的 url 中匹配它们。
-
@PaulK. 你是什么意思不分裂?如果我的文件是 file1.txt file2.txt 等等,那么 url 将是 s3n://bucket//file*.txt ?
-
你真的没有足够的使用来继续这里。是什么让您认为
numpy在这里真的是个问题?如果您读取文件并仅在空格上拆分data = sc.textFile("s3_url").map(str.split)会明显更快吗? -
@zero323 numpy 是个问题,因为它的 loadtxt 函数很慢。
标签: python numpy apache-spark pyspark rdd