Как я могу распространить свою задачу на все рабочие узлы в gcp? Я использую Pyspark - PullRequest
2 голосов
/ 05 марта 2020

Я создал кластер с 1 главным (cluster-m) и двумя рабочими узлами (clus-w-0, clus-w-1) в gcp datapro c. Теперь, используя pyspark rdd, я хочу распределить одну задачу так, чтобы все узлы были вовлечены. Ниже приведен фрагмент моего кода.

def pair_dist(row):
    dissimlarity = 0
    Z = row[0].split(',')
    X = row[1].split(',')

    for j in range(len(Z)):
        if Z[j] != X[j]:
            dissimlarity += 1

    return str(dissimlarity) + **os.uname()[1]**

sc = SparkContext.getOrCreate()
rdd = sc.textFile( "input.csv" )

rdd = sc.parallelize(rdd.take(5))
rdd = rdd.cartesian(rdd)
dist = rdd.map(lambda x: pair_dist(x)).collect()
dist = np.array(dist).reshape((5,5))
print(dist)

sc.stop()

Чтобы проверить, правильно ли это произошло, я поставил имя хоста вместе с результатом. Но я всегда получаю имя хоста clus-m , а не имя хоста рабочих узлов.

Вывод: [0clus-m 2clus-m ... ... 1clus-m 0clus-m .......] 5x5

Пожалуйста, предложите, что именно мне нужно сделать?

1 Ответ

1 голос
/ 05 марта 2020

Чтобы распределить работу, ваш входной набор данных должен быть защищен. Поскольку вы используете sc.textFile( "input.csv" ), у вас будет один маппер, считывающий файл.

Если, например, входной набор данных существенно умножен с помощью преобразований, вы могли бы RDD.repartition, чтобы упростить распараллеливание последующих операций.

Лучше всего будет разбить ввод на несколько файлов.

Руководство по программированию Spark содержит следующие пункты, которые имеют отношение к вашему вопросу:

Все файловые методы ввода Spark, включая textFile, поддерживают работу с каталогами, сжатыми файлами и подстановочными знаками. Например, вы можете использовать textFile ("/ my / directory"), textFile ("/ my / directory / .txt") и textFile ("/ my / directory / .gz").

Метод textFile также принимает необязательный второй аргумент для управления количеством разделов файла. По умолчанию Spark создает один раздел для каждого блока файла (в HDFS блоки по умолчанию составляют 128 МБ), но вы также можете запросить большее количество разделов, передав большее значение. Обратите внимание, что вы не можете иметь меньше разделов, чем блоков.

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