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)