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

209
Visualizações
Comportamiento diferente al leer DataFrame desde parquet usando CLI Versus ejecutable en el mismo entorno

Considere el siguiente programa como ejemplo mínimo reproducible -MRE :

 import pandas as pd import pyarrow from pyarrow import parquet def foo(): print(pyarrow.__file__) print('version:',pyarrow.cpp_version) print('-----------------------------------------------------') df = pd.DataFrame({'A': [1,2,3], 'B':['dummy']*3}) print('Orignal DataFrame:\n', df) print('-----------------------------------------------------') _table = pyarrow.Table.from_pandas(df) parquet.write_table(_table, 'foo') _table = parquet.read_table('foo', columns=[]) #passing empty list to columns arg df = _table.to_pandas() print('After reading from file with columns=[]:\n', df) print('-----------------------------------------------------') print('Not passing [] to columns parameter') _table = parquet.read_table('foo') #Not passing any list df = _table.to_pandas() print(df) print('-----------------------------------------------------') x = input('press any key to exit: ') if __name__=='__main__': foo()

Cuando lo ejecuto desde la consola/IDE, lee todos los datos de las columns=[] :

 (env) D:\foo>python foo.py D:\foo\env\lib\site-packages\pyarrow\__init__.py version: 3.0.0 ----------------------------------------------------- Orignal DataFrame: AB 0 1 dummy 1 2 dummy 2 3 dummy ----------------------------------------------------- After reading from file with columns=[]: AB 0 1 dummy 1 2 dummy 2 3 dummy ----------------------------------------------------- Not passing [] to columns parameter AB 0 1 dummy 1 2 dummy 2 3 dummy ----------------------------------------------------- press any key to exit:

Pero cuando lo ejecuto desde el ejecutable creado con Pyinstaller, no lee datos para las columns=[] :

 E:\foo\dist\foo\pyarrow\__init__.pyc version: 3.0.0 ----------------------------------------------------- Orignal DataFrame: AB 0 1 dummy 1 2 dummy 2 3 dummy ----------------------------------------------------- After reading from file with columns=[]: Empty DataFrame Columns: [] Index: [0, 1, 2] ----------------------------------------------------- Not passing [] to columns parameter AB 0 1 dummy 1 2 dummy 2 3 dummy ----------------------------------------------------- press any key to exit:

Como puede ver, pasar las columns=[] da un marco de datos vacío en el archivo ejecutable, pero este comportamiento no está allí mientras se ejecuta el archivo python directamente, y no estoy seguro de por qué hay dos comportamientos diferentes para el mismo código en el mismo entorno.

Mirando la cadena de documentación de parquet.read_table en el código fuente en GitHub :

columns: list
Si no es Ninguno, solo se leerán estas columnas del archivo. Un nombre de columna puede ser un prefijo de un campo anidado, por ejemplo, 'a' seleccionará 'a.b', 'a.c' y 'ade'.

read_table llama además a dataset.read que llama a _dataset.to_table que devuelve la llamada a self.scanner que luego devuelve la llamada al método estático from_dataset de la clase Scanner .

En todas partes, None se ha utilizado como valor predeterminado para el parámetro de columns , si None y [] se convierten directamente a Boolean en python, ambos serán False , pero si [] se compara con None , entonces será False , pero no se menciona en ninguna parte si debe obtener todas las columnas para las columns=[] porque se evalúa como False para el valor booleano, o si no debe leer ninguna columna ya que la lista está vacía.

Pero, ¿por qué el comportamiento es diferente al ejecutarlo desde la línea de comandos/IDE que al ejecutarlo desde el ejecutable creado con Pyinstaller para la misma versión de Pyarrow?

El entorno en el que estoy:

  • Versión de Python: 3.7.6
  • Versión Pyinstaller: 4.2
  • Versión Pyarrow: 3.0.0
  • Sistema operativo Windows 10 de 64 bits

Aquí está el archivo de especificaciones para su referencia si desea probarlo ( debe cambiar el parámetro pathex ):

foo.spec

 # -*- mode: python ; coding: utf-8 -*- import sys ; sys.setrecursionlimit(sys.getrecursionlimit() * 5) block_cipher = None a = Analysis(['foo.py'], pathex=['D:\\foo'], binaries=[], datas=[], hiddenimports=[], hookspath=[], runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher, noarchive=False) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) exe = EXE(pyz, a.scripts, [], exclude_binaries=True, name='foo', debug=False, bootloader_ignore_signals=False, strip=False, upx=True, console=True ) coll = COLLECT(exe, a.binaries, a.zipfiles, a.datas, strip=False, upx=True, upx_exclude=[], name='foo')
over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

La documentación de pyarrow para pyarrow.parquet.read_table probablemente no esté clara. He planteado FLECHA-13436 para aclarar esto.

Según algunas pruebas, parece que el comportamiento cambió en algún momento de ninguna columna a todas las columnas y luego volvió a cambiar (en 4.0) a ninguna columna. Creo que ninguna columna es el comportamiento correcto.

Entonces, supongo que su ejecutable está usando una versión diferente de pyarrow que su IDE. Por lo general, puede confirmar esto ejecutando...

 import pyarrow print(pyarrow.__file__) print(pyarrow.cpp_version)

...en ambos entornos y luego comparar los resultados.

over 4 years ago · Santiago Trujillo Relatório

0

Después de comentar con @ThePyGuy (el OP), se encontró la razón.

La razón es que cuando lo ejecutó en el IDE, lo ejecutó dentro de un entorno, mientras que cuando lo ejecutó en la línea de comandos, estaba fuera del entorno. Y los archivos DLL eran diferentes. Entonces, la solución fue copiar el paquete pyarrow fuera del entorno y dio el mismo resultado.

over 4 years ago · Santiago Trujillo 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