Spark - Равное разделение СДР на узлах - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть архитектура с 4 узлами и RDD с 4000 строками, и мне необходимо равномерно распределить этот RDD по узлам.Результат должен быть:

node 1 -> 1000 rows
node 2 -> 1000 rows
node 3 -> 1000 rows
node 4 -> 1000 rows.

Как я могу сделать это в Python?

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Я попытался реализовать решение, уже предложенное @ sramalingam24, используя pyspark, как вы уже используете.

from collections import Counter

data = [(i,j) for i,j in zip([i/1000 for i in range(0, 4000, 1)], range(500, 4500, 1))]
rdd = sc.parallelize(data).map(lambda x : (x[0], x[1]))
df = sqlContext.createDataFrame(rdd, ['key', 'values'])
df = df.repartition('key')

результаты проверки:

Counter(df.select(spark_partition_id()).collect())
Out[*]: Counter({Row(SPARK_PARTITION_ID()=5): 1000, Row(SPARK_PARTITION_ID()=128): 1000, Row(SPARK_PARTITION_ID()=107): 1000, Row(SPARK_PARTITION_ID()=69): 1000})
0 голосов
/ 20 декабря 2018

Если вы используете textFile для создания rdd, вы можете использовать:

scala> val rdd = sc.textFile("hdfs://.../input.txt", 4)

Или вы можете использовать:

scala> rdd = rdd.repartition(4)

rdd.repartition (n) делает случайное перемещениеразделить данные, чтобы соответствовать n разделов.

...