PySpark: конвертировать пару RDD обратно в обычный RDD

Есть ли способ, как я могу преобразовать пару СДР обратно в обычный СДР?

Предположим, я получил локальный CSV-файл и сначала загружаю его как обычный rdd

rdd = sc.textFile("$path/$csv")

Затем я создаю пару rdd (т.е. ключ - это строка перед ",", а значение - это строка после ",").

pairRDD = rdd.map(lambda x : (x.split(",")[0], x.split(",")[1]))

Я сохраняю pair RDD с помощью saveAsTextFile()

pairRDD.saveAsTextFile("$savePath")

Однако, как выяснилось, хранимый файл будет содержать некоторые необходимые символы, такие как "u", "(" и ")" (так как pyspark просто вызывает toString() для хранения пар ключ-значение), мне было интересно, смогу ли я преобразовать обратно в обычный rdd, чтобы сохраненный файл не содержал "u" или "(" и ")"? Или любые другие способы хранения, которые я могу использовать, чтобы избавиться от ненужных символов?

1 ответ

Решение

Эти символы являются Python представлением ваших данных в виде строки (кортежи и строки Unicode). Вы должны конвертировать ваши данные в текст (т.е. по одной строке на запись), так как вы используете saveAsTextFile, Вы можете использовать карту, чтобы снова преобразовать кортеж ключ / значение в одно значение, например:

pairRDD.map(lambda (k,v): "Value %s for key %s" % (v,k)).saveAsTextFile(savePath)
Другие вопросы по тегам