Добрый вечер, дорогой stackoverflow-Community
У меня есть следующая проблема.
Я создал кластер с cloudera для искры.
Существует кластер-менеджер и три рабочих, они не являются локальными.
Я хочу, чтобы кластер выполнял мою программу python на некоторых данных.
Как распределить данные с Python на Sparkcluster
from pyspark import SparkConf, SparkContext
import matplotlib.pyplot as plt
import numpy as np
from time import time as t
def mapper(point, data):
counter = 0
for elem in data:
dominate = False
for i in range(len(elem)):
if point[i] < elem[i]:
dominate = True
if dominate:
counter += 1
return (point,counter)
if __name__=="__main__":
xx = np.array([-0.51, 51.2])
yy = np.array([0.33, 51.6])
means = [xx.mean(), yy.mean()]
stds = [xx.std()/3, yy.std()/3]
corr = 0.8 # correlation
covs = [[stds[0]**2 , stds[0]*stds[1]*corr],
[stds[0]*stds[1]*corr, stds[1]**2]]
m = np.random.multivariate_normal(means, covs, 1000).T
data = list(zip(m[0],m[1]))
conf = SparkConf().setAppName("Naive_Spark")
sc = SparkContext(conf=conf)
data_rdd = sc.parallelize(data).partitionBy(3).persist()
start = t()
mapped = data_rdd.map(lambda x: mapper(x, data)).filter(lambda x: x[1] == len(data)-1).collect()
print(mapped)
time = str(t()-start)
print(mapped)
with open('/home/.../Schreibtisch/Naive.txt','a') as f:
f.write('Spark: ' + str(mapped) + ' in ' + time + ' ms\n\n')
sc.stop()
plt.scatter(*zip(*data))
plt.show()
На данный момент я создаю данные в моем питона-программе и на местном это работает отлично.
Обычно я отправляю свой код и некоторые данные в текстовый файл в свой кластер и выполняю его с помощью spark-submit.
Мой вопрос в том, как разделить мои данные, чтобы три узла получали часть из них для работы с ним.
Привет
Sam
Но должен быть способ управления узлами, поэтому я могу закрыть один из них, если я хочу использовать только два из них. – Sam