java scala mapreduce gzip apache-spark

java - soporte gzip en Spark



scala mapreduce (1)

Para un proyecto de Big Data, estoy planeando utilizar spark , que tiene algunas características agradables como computadores en memoria para cargas de trabajo repetidas. Se puede ejecutar en archivos locales o encima de HDFS.

Sin embargo, en la documentación oficial, no puedo encontrar ninguna pista sobre cómo procesar archivos gzip. En la práctica, puede ser bastante eficiente procesar archivos .gz en lugar de archivos descomprimidos.

¿Hay alguna manera de implementar manualmente la lectura de archivos comprimidos o está descomprimiendo automáticamente al leer un archivo .gz?


De la sección de la guía de programación de Spark Scala sobre "Conjuntos de datos Hadoop" :

Spark puede crear conjuntos de datos distribuidos desde cualquier archivo almacenado en el sistema de archivos distribuidos de Hadoop (HDFS) u otros sistemas de almacenamiento compatibles con Hadoop (incluido su sistema de archivos local, Amazon S3, Hypertable, HBase, etc.). Spark admite archivos de texto, SequenceFiles y cualquier otro Hadoop InputFormat.

La compatibilidad con los archivos de entrada gzip debería funcionar de la misma manera que en Hadoop. Por ejemplo, sc.textFile("myFile.gz") debería descomprimir automáticamente y leer archivos comprimidos gzip ( textFile() se implemented realmente utilizando TextInputFormat de Hadoop, que admite archivos gzip-comprimidos).

Como se menciona por @ nick-chammas en los comentarios:

tenga en cuenta que si llama a sc.textFile() en un archivo comprimido, Spark le proporcionará un RDD con solo 1 partición (desde 0.9.0). Esto se debe a que los archivos gzip no son divisibles . Si no reparticionas el RDD de alguna manera, cualquier operación en ese RDD estará limitada a un solo núcleo