2016-10-07 2 views
0

У меня есть массив 50 с поплавковыми значениями (50*7). Как я могу представить себе 50 массивов по одному и тому же индексу с функцией редуктора PySpark.Суммировать значение индекса в нескольких массивах с pyspark

Пример:

array1 = {1,2,3,4,5,6,7} 
array2 = {3,4,2,3,5,6,7} 
.... 

результат должен быть array3 = {4,6,5,7,10,12,14}.

Это требование к проекту для использования PySpark на платформе Map-Reducer.

Теперь я могу выяснить карту часть:

NUM_SAMPLES = 50 
result = sc.parallelize(xrange(0, NUM_SAMPLES)).map(random_generation) 

В результате здесь содержит 50 массивов. Функция random_generation дает один массив с 7 случайными числами.

Пожалуйста, любой может предоставить мне предложение о сокращении части.

+0

'массив1 = {1,2,3,4,5,6,7}' и т.д., не являются массивами, они [множества] (HTTPS://docs.python.org/3/library/stdtypes.html#set-types-set-frozenset) и поэтому содержат только отдельные значения (отличные от хэша). – Aeck

ответ

0

Редактировать: Я думаю, что проще использовать DataFrame.

from pyspark.sql import SparkSession 

spark = SparkSession \ 
    .builder \ 
    .getOrCreate() 

arrays = [ 
    [1,2,3,4,5,6,7], 
    [3,4,2,3,5,6,7], 
    [1,2,3,4,5,6,7], 
] 

df = spark.createDataFrame(arrays) 
s = df.groupBy().sum().collect() 

print s 
print list(s[0]) 

Результат

[Row(sum(_1)=5, sum(_2)=8, sum(_3)=8, sum(_4)=11, sum(_5)=15, sum(_6)=18, sum(_7)=21)] 
[5, 8, 8, 11, 15, 18, 21] 
+0

Спасибо за ответ. Проблема состоит не в том, чтобы добавить два массива. У нас есть 50 подобных массивов, чтобы подвести итог. Кажется, что метод, который вы предоставляете, может решить только два добавления массива, но не более двух. Как мы будем решать проблему с суммой 50 массивов? Большое спасибо !!! – KylewriteinC