首页 > 解决方案 > 如何将 spark rdd 转换为 numpy 数组?

问题描述

我已经使用 spark 上下文阅读了 textFile,测试文件是一个 csv 文件。下面的 testRdd 是与我的 rdd 类似的格式。

testRdd = [[1.0,2.0,3.0,4.0,5.0,6.0,7.0],
[0.0,0.1,0.3,0.4,0.5,0.6,0.7],[1.1,1.2,1.3,1.4,1.5,1.6,1.7]]

我想将上面的 rdd 转换成一个 numpy 数组,所以我可以将 numpy 数组输入到我的机器学习模型中。

当我尝试以下

 feature_vector = numpy.array(testRDD).astype(numpy.float32)

它给了我以下类型错误:

TypeError: float() argument must be a string or a number

我应该如何将 spark rdd 转换为 numpy 数组。

标签: pythonnumpyapache-sparkpyspark

解决方案


collect在调用之前,您必须将数据传输到本地计算机numpy.array

import numpy as np

a = np.array(testRdd.collect())
print(a)
#array([[ 1. ,  2. ,  3. ,  4. ,  5. ,  6. ,  7. ],
#       [ 0. ,  0.1,  0.3,  0.4,  0.5,  0.6,  0.7],
#       [ 1.1,  1.2,  1.3,  1.4,  1.5,  1.6,  1.7]])

或者,如果您希望每一行作为一个单独的数组:

b = testRdd.map(np.array).collect()
print(b)
#[array([ 1.,  2.,  3.,  4.,  5.,  6.,  7.]),
# array([ 0. ,  0.1,  0.3,  0.4,  0.5,  0.6,  0.7]),
# array([ 1.1,  1.2,  1.3,  1.4,  1.5,  1.6,  1.7])]

推荐阅读