Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

564
Visualizações
AttributeError: no se puede obtener el atributo 'nuevo_bloque' en <módulo 'pandas.core.internals.blocks'>

Estaba usando pyspark en AWS EMR (4 r5.xlarge como 4 trabajadores, cada uno tiene un ejecutor y 4 núcleos), y obtuve AttributeError: Can't get attribute 'new_block' on <module 'pandas.core.internals.blocks' . A continuación se muestra un fragmento del código que arrojó este error:

 search = SearchEngine(db_file_dir = "/tmp/db") conn = sqlite3.connect("/tmp/db/simple_db.sqlite") pdf_ = pd.read_sql_query('''select zipcode, lat, lng, bounds_west, bounds_east, bounds_north, bounds_south from simple_zipcode''',conn) brd_pdf = spark.sparkContext.broadcast(pdf_) conn.close() @udf('string') def get_zip_b(lat, lng): pdf = brd_pdf.value out = pdf[(np.array(pdf["bounds_north"]) >= lat) & (np.array(pdf["bounds_south"]) <= lat) & (np.array(pdf['bounds_west']) <= lng) & (np.array(pdf['bounds_east']) >= lng) ] if len(out): min_index = np.argmin( (np.array(out["lat"]) - lat)**2 + (np.array(out["lng"]) - lng)**2) zip_ = str(out["zipcode"].iloc[min_index]) else: zip_ = 'bad' return zip_ df = df.withColumn('zipcode', get_zip_b(col("latitude"),col("longitude")))

A continuación se muestra el rastreo, donde la línea 102, en get_zip_b se refiere a pdf = brd_pdf.value :

 21/08/02 06:18:19 WARN TaskSetManager: Lost task 12.0 in stage 7.0 (TID 1814, ip-10-22-17-94.pclc0.merkle.local, executor 6): org.apache.spark.api.python.PythonException: Traceback (most recent call last): File "/mnt/yarn/usercache/hadoop/appcache/application_1627867699893_0001/container_1627867699893_0001_01_000009/pyspark.zip/pyspark/worker.py", line 605, in main process() File "/mnt/yarn/usercache/hadoop/appcache/application_1627867699893_0001/container_1627867699893_0001_01_000009/pyspark.zip/pyspark/worker.py", line 597, in process serializer.dump_stream(out_iter, outfile) File "/mnt/yarn/usercache/hadoop/appcache/application_1627867699893_0001/container_1627867699893_0001_01_000009/pyspark.zip/pyspark/serializers.py", line 223, in dump_stream self.serializer.dump_stream(self._batched(iterator), stream) File "/mnt/yarn/usercache/hadoop/appcache/application_1627867699893_0001/container_1627867699893_0001_01_000009/pyspark.zip/pyspark/serializers.py", line 141, in dump_stream for obj in iterator: File "/mnt/yarn/usercache/hadoop/appcache/application_1627867699893_0001/container_1627867699893_0001_01_000009/pyspark.zip/pyspark/serializers.py", line 212, in _batched for item in iterator: File "/mnt/yarn/usercache/hadoop/appcache/application_1627867699893_0001/container_1627867699893_0001_01_000009/pyspark.zip/pyspark/worker.py", line 450, in mapper result = tuple(f(*[a[o] for o in arg_offsets]) for (arg_offsets, f) in udfs) File "/mnt/yarn/usercache/hadoop/appcache/application_1627867699893_0001/container_1627867699893_0001_01_000009/pyspark.zip/pyspark/worker.py", line 450, in <genexpr> result = tuple(f(*[a[o] for o in arg_offsets]) for (arg_offsets, f) in udfs) File "/mnt/yarn/usercache/hadoop/appcache/application_1627867699893_0001/container_1627867699893_0001_01_000009/pyspark.zip/pyspark/worker.py", line 90, in <lambda> return lambda *a: f(*a) File "/mnt/yarn/usercache/hadoop/appcache/application_1627867699893_0001/container_1627867699893_0001_01_000009/pyspark.zip/pyspark/util.py", line 121, in wrapper return f(*args, **kwargs) File "/mnt/var/lib/hadoop/steps/s-1IBFS0SYWA19Z/Mobile_ID_process_center.py", line 102, in get_zip_b File "/mnt/yarn/usercache/hadoop/appcache/application_1627867699893_0001/container_1627867699893_0001_01_000009/pyspark.zip/pyspark/broadcast.py", line 146, in value self._value = self.load_from_path(self._path) File "/mnt/yarn/usercache/hadoop/appcache/application_1627867699893_0001/container_1627867699893_0001_01_000009/pyspark.zip/pyspark/broadcast.py", line 123, in load_from_path return self.load(f) File "/mnt/yarn/usercache/hadoop/appcache/application_1627867699893_0001/container_1627867699893_0001_01_000009/pyspark.zip/pyspark/broadcast.py", line 129, in load return pickle.load(file) AttributeError: Can't get attribute 'new_block' on <module 'pandas.core.internals.blocks' from '/mnt/miniconda/lib/python3.9/site-packages/pandas/core/internals/blocks.py'>

Algunas observaciones y proceso de pensamiento:

1, después de realizar una búsqueda en línea, ¿el AttributeError en pyspark parece ser causado por versiones de pandas que no coinciden entre el controlador y los trabajadores?

2, pero ejecuté el mismo código en dos conjuntos de datos diferentes, uno funcionó sin errores pero el otro no, lo que parece muy extraño e indeterminado, y parece que los errores pueden no ser causados por versiones de pandas que no coinciden. De lo contrario, ninguno de los dos conjuntos de datos tendría éxito.

3, luego ejecuté el mismo código en el conjunto de datos exitoso nuevamente, pero esta vez con diferentes configuraciones de chispa: configurando spark.driver.memory de 2048M a 4192m, y arrojó AttributeError.

4, en conclusión, creo que AttributeError tiene algo que ver con el controlador. Pero no puedo decir cómo están relacionados con el mensaje de error y cómo solucionarlo: AttributeError: no se puede obtener el atributo 'new_block' en <módulo 'pandas.core.internals.blocks'.

over 4 years ago · Hanz Gallego
5 Respostas
Responde à pergunta

0

Tuve el mismo AttributeError bajo las circunstancias de la siguiente manera:

  • Pickle File se creó usando Pandas 1.4.0 en una máquina con Windows, Python 3.8
  • Traté de cargar el archivo usando Pandas 1.3.5 en una máquina Debian, Python 3.7
over 4 years ago · Hanz Gallego Relatório

0

pip install --upgrade --user pandas==1.3 (+ reiniciar)

over 4 years ago · Hanz Gallego Relatório

0

Yo tuve el mismo problema. Si usa spyder, pruebe los cuadernos jupyter. Tuve el mismo error en spyder, pero en los cuadernos jupyter funcionó.

¡Solo reiniciar spyder resolvió mi problema!

over 4 years ago · Hanz Gallego Relatório

0

Tuve el mismo error al usar pandas 1.3.2 en el servidor mientras que 1.2 en mi cliente. La degradación de pandas a 1.2 resolvió el problema.

over 4 years ago · Hanz Gallego Relatório

0

Soluciones

  • Manteniendo el archivo pickle sin cambios, actualice su versión de pandas a 1.3.x y luego cargue el archivo pickle.

O

  • Manteniendo su versión actual de pandas sin cambios, baje la versión de pandas a 1.2.x en el lado de descarga y luego descargue un nuevo archivo pickle con v1.2.x. Cárgalo de lado con tus pandas de la versión 1.2.x

En breve

la versión de pandas utilizada para descargar el pickle ( dump_version , probablemente 1.3.x) no es compatible con la versión de pandas utilizada para cargar el pickle ( load_version , probablemente 1.2.x). Para resolverlo, intente actualizar la versión de pandas ( load_version ) a 1.3.x en el entorno de carga y luego cargue el pickle. O baje la versión de pandas ( dump_version ) a 1.2.x y luego vuelva a descargar un nuevo pickle. Luego de esto, puedes cargar el nuevo pickle con tus pandas de la versión 1.2.x

Y esto no tiene nada que ver con PySpark

en largo

Este problema está relacionado con la incompatibilidad hacia atrás entre las versiones 1.2.x y 1.3.x de Pandas. En la versión 1.2.5 y anteriores, Pandas usa el nombre de variable new_blocks en el módulo pandas.core.internals.blocks cf source code v1.2.5 . El 2 de julio de 2021, Pandas lanzó la versión 1.3.0 . En esta actualización, Pandas cambió la API, el nombre de la variable new_blocks en el módulo pandas.core.internals.blocks se cambió a new_block cf source code v1.3.0 .

Este cambio de API dará como resultado dos errores de incompatibilidad:

  • Si ha descargado un pickle con Pandas v1.3.x e intenta cargar el pickle con Pandas v1.2.x, obtendrá el siguiente error:

AttributeError: Can't get attribute 'new_block' on <module 'pandas.core.internals.blocks' from '.../site-packages/pandas/core/internals/blocks.py'>'>

Python lanza este error quejándose de que no puede encontrar el atributo new_block en su pandas.core.internals.blocks actual porque para cargar un objeto en pickle, tiene que usar exactamente la misma clase que se usa para descargar el pickle.

Este es exactamente tu caso: Haber volcado el pickle con Pandas v1.3.x e intentar cargar el pickle con Pandas v1.2.x

Para reproducir el error

pip install --upgrade pandas==1.3.4

 import numpy as np import pandas as pd df =pd.DataFrame(np.random.rand(3,6)) with open("dump_from_v1.3.4.pickle", "wb") as f: pickle.dump(df, f) quit()

pip install --upgrade pandas==1.2.5

 import pickle with open("dump_from_v1.3.4.pickle", "rb") as f: df = pickle.load(f) --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-2-ff5c218eca92> in <module> 1 with open("dump_from_v1.3.4.pickle", "rb") as f: ----> 2 df = pickle.load(f) 3 AttributeError: Can't get attribute 'new_block' on <module 'pandas.core.internals.blocks' from '/opt/anaconda3/lib/python3.7/site-packages/pandas/core/internals/blocks.py'>
over 4 years ago · Hanz Gallego Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda