Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

99
Vistas
Rendimiento de Apache Beam entre Python y Java ejecutándose en el flujo de datos de GCP

Tenemos una canalización de datos de Beam ejecutándose en un flujo de datos de GCP escrito con Python y Java. Al principio, teníamos algunos trabajos de vigas de pitón simples y directos que funcionaban muy bien. Así que recientemente decidimos transformar más haz de java en trabajo de haz de python. Cuando tenemos un trabajo más complicado, especialmente el trabajo que requiere ventanas en el haz, notamos que hay una lentitud significativa en el trabajo de Python que en el trabajo de Java, que termina usando más CPU y memoria y cuesta mucho más.

algunos ejemplos de código de python se ven así:

 step1 = ( read_from_pub_sub | "MapKey" >> beam.Map(lambda elem: (elem.data[key], elem)) | "WindowResults" >> beam.WindowInto( beam.window.SlidingWindows(360,90), allowed_lateness=args.allowed_lateness, ) | "GroupById" >> beam.GroupByKey()

Y el código Java es como:

 PCollection<DataStructure> step1 = message .apply( "MapKey", MapElements.into( TypeDescriptors.kvs( TypeDescriptors.strings(), TypeDescriptor.of(DataStructure.class))) .via(event -> KV.of(event.key, event))) .apply( "WindowResults", Window.<KV<String, CustomInterval>>into( SlidingWindows.of(Duration.standardSeconds(360)) .every(Duration.standardSeconds(90))) .withAllowedLateness(Duration.standardSeconds(this.allowedLateness)) .discardingFiredPanes()) .apply("GroupById", GroupByKey.<String, DataStructure>create())

Nos dimos cuenta de que Python siempre usa como 3 veces más CPU y memoria de lo que necesita Java. Hicimos algunas pruebas experimentales que solo ejecutaron la entrada JSON y la salida JSON, con los mismos resultados. No estamos seguros de que sea solo porque Python, en general, es más lento que Java o porque la forma en que GCP Dataflow ejecuta Beam Python y Java es diferente. Cualquier experiencia similar, pruebas y razones por las que esto es apreciado.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Sí, este es un factor de rendimiento muy normal entre Python y Java. De hecho, para muchos programas el factor puede ser 10x o mucho más.

Los detalles del programa pueden cambiar radicalmente el rendimiento relativo. Aquí hay algunas cosas a considerar:

  • Creación de perfiles del trabajo de Dataflow (documentos oficiales)
  • Creación de perfiles de una canalización de Dataflow (blog mediano)
  • Creación de perfiles de tuberías Apache Beam Python (otro blog mediano)
  • Creación de perfiles de Python (documentos generales de Cloud Profiler)
  • ¿Cómo puedo perfilar un trabajo de Python Dataflow? (pregunta anterior de StackOverflow sobre el trabajo de creación de perfiles de Python)

Si prefiere Python por su sintaxis concisa o su ecosistema de bibliotecas, el enfoque para lograr velocidad es usar bibliotecas C optimizadas o Cython para el procesamiento central, por ejemplo, usando pandas/numpy/etc. Si utilizala nueva API de marco de datos compatible con Pandas de Beam , obtendrá automáticamente este beneficio.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda