El uso del C-Stack está demasiado cerca del límite, no debido a código recursivo.
Tengo una pregunta intrigante y no puedo encontrar la respuesta. Tengo una función específica de Python que ejecuta un script de SQL, obtiene los datos y los transforma en un pd.DataFrame. El tamaño de una respuesta típica es de alrededor de 100 KB (83.9 KB en el ejemplo a continuación):
Cuando ejecuto la misma función exacta, que importo en una sesión de R usando reticulate
, obtengo un error de “C Stack usage too close to the limit”.
No entiendo por qué R me da una respuesta así para un dataframe tan pequeño. ¿Tiene que ver con la traducción del código de Python a R a través de reticulate? Una pregunta bastante específica, pero me gustaría saber si alguien sabe la respuesta.
Por favor, vea el código de la función de Python a continuación:
def get_raw_data_(make, year):
sql_file = WORKING_DIRECTORY.joinpath("sql/get_raw_data.sql")
sql_string = sql_script_to_string(sql_file)
dragend_rules_file = WORKING_DIRECTORY.joinpath(f'sql/dragend_rules/{make}.sql')
dragend_rules = sql_script_to_string(dragend_rules_file)
tellend_rules_file = WORKING_DIRECTORY.joinpath(f'sql/tellend_rules/{make}.sql')
tellend_rules = sql_script_to_string(tellend_rules_file)
to_replace = {
'INSERT_YEAR':year,
'INSERT_DRAGEND_RULES':dragend_rules,
'INSERT_TELLEND_RULES':tellend_rules
}
for key, value in to_replace.items():
sql_string = sql_string.replace(key,value)
sql_string = sql_string.replace('INSERT_MAKE', make)
res = execute_sql(sql_string, cur)
res = pd.DataFrame(res, columns = [
"CONTRACTNR", "MAKE", "TYPE",
"VEHICLEKIND", "STATUS", "LICENSEPLATE",
"FUELTYPE", "COMMERCIALUNITLEVEL1", "YEARMONTHREGISTRATION",
"DRAGEND"
])
res = res.reset_index(drop=True)
cols_fact = res.columns[~res.columns.isin(['CONTRACTNR', 'YEARMONTHREGISTRATION'])]
res[cols_fact] = res[cols_fact].astype('category')
return res
Llamo a esta función en R de la siguiente manera:
source('get_raw_data.py')
get_raw_data_('ME', '2021')
davy.ai
Es posible que el error que estás recibiendo en R esté relacionado con la traducción del código de Python a R del paquete “reticulate”. Sin embargo, también es posible que el error esté relacionado con los límites de memoria de tu sistema o de la sesión de R.
Una posible solución que podrías intentar es ajustar los límites de memoria de tu sesión de R utilizando el comando “ulimit”. Por ejemplo, podrías intentar aumentar el límite del tamaño de la pila utilizando “ulimit -s unlimited”.
Además, es posible que desees verificar si hay objetos grandes o estructuras de datos en tu sesión de R que puedan contribuir al uso de memoria. Podrías intentar eliminar objetos innecesarios utilizando la función “rm()” o utilizar la función “gc()” para activar la recolección de basura.
Otra posible solución a considerar sería utilizar fragmentación o paginación en tu consulta de SQL para limitar la cantidad de datos que se devuelven y procesan en un momento dado. Esto podría ayudar a reducir el uso de memoria y evitar posibles errores relacionados con los límites de memoria.
En general, sería útil investigar más a fondo la fuente del error revisando los registros del sistema o ejecutando diagnósticos adicionales de memoria para identificar cualquier problema potencial con tu sistema o sesión de R.