Entonces, tengo una aplicación en la que tengo varios archivos comprimidos ubicados en un directorio HDFS. Quiero crear un RDD, donde cada tarea trabaja en el contenido de un archivo zip. En este momento, creo un RDD a partir de los nombres de los archivos y, dentro de cada tarea, leo el contenido de un archivo zip, utilizando la biblioteca cliente HDFS.

Sin embargo, no quiero hacerlo así, sino que tengo una tarea asignada automáticamente al contenido del archivo zip. Creo que sería más eficiente de esta manera, porque la tarea computacional iría al nodo que contiene el archivo zip, mientras que en mi enfoque actual, llevo los datos a la tarea computacional, lo que significa que la tarea puede tener que leer un archivo zip. distribuido en algún otro nodo.

1
pythonic 16 ene. 2017 a las 17:30

1 respuesta

La mejor respuesta

Puede utilizar la API de RDD de Hadoop (código de muestra de PySpark):

  newconf = {"mapred.input.dir": <<DIRECTORY>>}                        
    hadoopRdd01 = sc.newAPIHadoopRDD("org.apache.hadoop.mapreduce.lib.input.TextInputFormat",
                                "org.apache.hadoop.io.Text",
                                "org.apache.hadoop.io.Text",
                                conf=newconf)

Si está utilizando zip / gz, los archivos no se pueden dividir, por lo que cada zip será una entrada a una tarea y se cargará en una partición.

1
Venkat 16 ene. 2017 a las 17:56