es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Pyspark spark.read.csv().collect() devuelve una lista vacía.

He estado intentando usar el método df.collect() para ver el contenido de mis celdas en pyspark 3.1.2, pero sigue devolviendo una lista vacía:

etp.collect()
[]

Aunque etp.show() me está dando resultados.

El código que estoy usando:

from pyspark.sql import SparkSession
spark = SparkSession\
    .builder\
    .appName('Read_csv')\
    .getOrCreate()

etp = spark.read.options(header=True)\
.options(delimiter=';')\
.options(inferschema='true')\
.csv('mypath\etp.csv')

etp.collect()

He intentado cambiar el separador, pero tengo el mismo problema.

Mi objetivo es iterar sobre el contenido de la celda basada en el número de fila, pero si no puedo acceder al contenido, no tiene sentido. ¿Alguna idea de cosas que podría intentar o cambiar?

Gracias de antemano.

Edit: Estoy usando Jupyter Notebook.
Edit 2: He probado otras operaciones como withColumn… y parecen funcionar. También Select().show(). Parece que .collect() ha cambiado, pero no puedo encontrar la información.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Es posible que el método collect no esté devolviendo ningún valor porque los datos que estás intentando recolectar son demasiado grandes para ser procesados por la memoria de tu máquina. Cuando trabajas con conjuntos de datos grandes, siempre es buena idea utilizar muestreo o limitar la cantidad de filas que estás recolectando para evitar problemas de memoria.

    Podrías intentar usar la función limit() para limitar la cantidad de filas devueltas por el método collect(). Por ejemplo, etp.limit(10).collect() solo devolverá las primeras 10 filas del conjunto de datos.

    Otra opción es intentar usar df.take(n) en lugar de df.collect() para recolectar las primeras n filas del conjunto de datos.

    También es importante verificar si hay valores nulos en tu conjunto de datos, ya que esto podría hacer que el método collect() devuelva resultados vacíos. Puedes verificar los valores nulos utilizando el método isNull() o utilizando el método fillna() para completar los valores faltantes antes de recolectar los datos.

    Además, cabe mencionar que collect() es una operación costosa en PySpark y debería utilizarse con moderación. Si tu objetivo es iterar a través de los datos, existen formas más eficientes de lograrlo utilizando las funciones incorporadas de PySpark.

Comments are closed.