Как конвертировать spark rdd в массив numpy? - PullRequest
0 голосов
/ 15 января 2019

Я прочитал textFile, используя контекст spark, тестовый файл - это файл 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

Как я должен преобразовать искру rdd в массив NumPy.

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Вам необходимо 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])]
0 голосов
/ 15 января 2019

Мой лучший шанс на это:

import pandas
arr = rdd.toDF().toPandas().values

rdd необходимо преобразовать в фрейм данных, фрейм данных должен отображаться как pandas, а затем из него будут выставлены базовые значения (массивы numpy).

Редактировать - Вы сказали, что вам это не нравится, поэтому вы пытались просто сделать карту? Вот так:

arr = np.array()
rdd.map(lambda x: np.append(arr, x))

Вы должны включить в свой вопрос все, что вы пробовали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...