Создать словарь (карту) со строкой, индекс в pyspark - PullRequest
0 голосов
/ 12 мая 2018

У меня есть СДР, например:

rdd = sc.parallelize(['a','b','a','c','d','b','e'])

Я хочу создать карту (словарь) каждого уникального значения для индекса.

Вывод будет карта (ключ, значение) вроде:

{'a':0, 'b':1, 'c':2,'d':3,'e':4}

Это очень легко сделать в Python, но я не знаю, как это сделать в Spark.

Ответы [ 2 ]

0 голосов
/ 12 мая 2018

То, что вы ищете, это zipWithIndex

Итак, для вашего примера (часть "sort" предназначена только для того, чтобы получить значение 0 и т. Д.):

rdd = sc.parallelize(['a','b','a','c','d','b','e'])

print rdd.distinct().sortBy(lambda x: x).zipWithIndex().collectAsMap()

{'a': 0, 'c': 2, 'b': 1, 'e': 4, 'd': 3}

0 голосов
/ 12 мая 2018

Если вы можете принять пробелы, это должно помочь:

rdd.zipWithIndex().reduceByKey(min).collectAsMap()
# {'b': 1, 'c': 3, 'a': 0, 'e': 6, 'd': 4}

В противном случае (намного дороже)

(rdd
    .zipWithIndex()
    .reduceByKey(min)
    .sortBy(lambda x: x[1])
    .keys()
    .zipWithIndex()
    .collectAsMap())
# {'a': 0, 'b': 1, 'c': 2, 'd': 3, 'e': 4}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...