python - parallelize - Guardar RDD como archivo de secuencia en pyspark
pyspark tutorial (2)
Los archivos de secuencia se utilizan para almacenar pares clave-valor, por lo que no puede simplemente almacenar RDD[String]
. Teniendo en cuenta sus datos, supongo que está buscando algo como esto:
rdd = sc.parallelize([
"2,Fitness", "3,Footwear", "4,Apparel"
])
rdd.map(lambda x: tuple(x.split(",", 1))).saveAsSequenceFile("testSeq")
Si quieres mantener cadenas enteras solo usa las teclas None
:
rdd.map(lambda x: (None, x)).saveAsSequenceFile("testSeqNone")
Puedo ejecutar esta secuencia de comandos para guardar el archivo en formato de texto, pero cuando intento ejecutar saveAsSequenceFile, se está produciendo un error. Si alguien tiene una idea acerca de cómo guardar el RDD como archivo de secuencia, por favor, hágamelo saber el proceso. Intenté buscar una solución en "Learning Spark" y en la documentación oficial de Spark.
Esto funciona con éxito
dataRDD = sc.textFile("/user/cloudera/sqoop_import/departments")
dataRDD.saveAsTextFile("/user/cloudera/pyspark/departments")
Esto falla
dataRDD = sc.textFile("/user/cloudera/sqoop_import/departments")
dataRDD.saveAsSequenceFile("/user/cloudera/pyspark/departmentsSeq")
Error: Se produjo un error al llamar a z: org.apache.spark.api.python.PythonRDD.saveAsSequenceFile. : org.apache.spark.SparkException: el elemento RDD de tipo java.lang.String no se puede usar
Aquí están los datos:
2,Fitness
3,Footwear
4,Apparel
5,Golf
6,Outdoors
7,Fan Shop
8,TESTING
8000,TESTING
Para escribir en el archivo Sequence necesita los datos en formato de Hadoop API.
Cadena como texto
Int como IntWritable
En Python:
data = [(1, ""),(1, "a"),(2, "bcdf")]
sc.parallelize(data).saveAsNewAPIHadoopFile(path,"org.apache.hadoop.mapreduce.lib.output.SequenceFileOutputFormat","org.apache.hadoop.io.IntWritable","org.apache.hadoop.io.Text")