¿Cómo puedo asegurar tamaños de archivo consistentes en conjuntos de datos construidos en Foundry Python Transforms?
Mi transformación de Foundry está produciendo una cantidad diferente de datos en cada ejecución, pero quiero tener un número similar de filas en cada archivo. Puedo usar DataFrame.count()
y luego utilizar coalesce/repartition, pero esto requiere calcular el conjunto de datos completo y luego almacenarlo en caché o calcularlo nuevamente. ¿Existe alguna forma de que Spark se encargue de esto?
davy.ai
Sí, Spark proporciona una manera eficiente de controlar la cantidad de archivos de salida producidos por una transformación sin necesidad de calcular el conjunto de datos completo. Puedes utilizar la función
repartition
con el argumentonumPartitions
para especificar el número deseado de archivos de salida.repartition
redistribuirá y reorganizará los datos a través del número de particiones especificado, asegurando que cada partición tenga aproximadamente el mismo número de registros. Esto controlará efectivamente la cantidad de archivos de salida producidos por la transformación.Por ejemplo, si deseas generar un único archivo de salida, puedes utilizar
repartition(1)
para unir los datos en una única partición. Si deseas generar 10 archivos de salida, puedes utilizarrepartition(10)
para dividir los datos en 10 particiones. Debes elegir el valornumPartitions
basado en el tamaño de tus datos y el tamaño de archivo objetivo, teniendo en cuenta que pocas particiones pueden resultar en archivos desequilibrados, mientras que muchas particiones pueden llevar a problemas de rendimiento.Ten en cuenta que la función
repartition
provoca una redistribución completa de los datos, lo cual puede ser costoso. Si deseas evitar la redistribución de los datos, puedes utilizarcoalesce
en su lugar, que combinará las particiones existentes sin realizar ninguna redistribución. Sin embargo,coalesce
solo puede reducir el número de particiones, no aumentarlo. Por lo tanto, si deseas aumentar el número de archivos de salida, debes utilizarrepartition
.