Cómo restaurar RDD de (clave, valor) pares después de que se haya almacenado / leído desde un archivo de texto

Guardé mi RDD de pares (clave, valor) en un archivo de texto usando saveAsTextFile. Después de leer el archivo de texto con el sc.textFile("filename.txt") , terminé con cadenas, en lugar de pares (clave, valor). Mis claves solían ser cadenas y valores eran listas de flotadores. Aquí hay un ejemplo:

 (u'ALM_0', [98.0, 110.0, 104.0, 6.0, 208.0, -262.0, 136.0, -204.67395833333333, 45.362440283766297, -196487.0, 1.0, 4.0, 2.5, 1.1180339887498949, 10.0, -46.0, 261.0, -3.6343749999999999]) 

¿Cómo puedo convertir fácilmente esta cadena en par (clave, valor)? ¿Hay un comando de lectura de Spark que lo hará en lectura?

Estoy usando la interfaz de Python para Spark.

ast.literal_eval debería hacer el truco:

 import ast data1 = [(u'BAR_0', [1.0, 2.0, 3.0]), (u'FOO_1', [4.0, 5.0, 6.0])] rdd = sc.parallelize(data1) rdd.saveAsTextFile("foobar_text") data2 = sc.textFile("foobar_text").map(ast.literal_eval).collect() assert sorted(data1) == sorted(data2) 

pero en general, es mejor evitar una situación como esta en primer lugar y usar, por ejemplo, un SequenceFile :

 rdd.saveAsPickleFile("foobar_seq") sc.pickleFile("foobar_seq") 

Vas a tener que implementar un analizador para tu entrada. Lo más fácil de hacer es asignar su salida a una salida separada por caracteres con una pestaña o delimitador de dos puntos y usar el delimitador dertwigdo en su mapa al leer, básicamente como en el ejemplo de WordCount.