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.
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étodocollect()
. 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 dedf.collect()
para recolectar las primerasn
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étodoisNull()
o utilizando el métodofillna()
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.