Estoy tratando de iterar a través de todos los valores distintos en la columna de un gran Pyspark trama de datos. Cuando trato de hacerlo utilizando .distinct (). Collect () plantea una tarea demasiado grande, advirtiendo incluso si sólo hay dos valores distintos. Aquí hay un código de ejemplo:
import pandas as pd
import numpy as np
from pyspark.sql import SparkSession
import pyarrow as pa
spark = SparkSession.builder.appName('Basics').getOrCreate()
spark.conf.set(spark.sql.execution.arrow.enabled, 'true')
length = 200000
table_data = pd.DataFrame({'a': np.random.randint(2,size = length), 'b': np.random.randint(2,size = length),'c': np.random.randint(2,size = length)})
data = spark.createDataFrame(table_data)
for x in data.select(a).distinct().collect():
data = data.filter(a == '+str(x[0])+')
Este código produce esta advertencia que se refiere a la línea para x en data.select ( a ) distinta () collect ()..:
20/01/13 20:39:01 WARN TaskSetManager: Stage 0 contains a task of very large size (154 KB). The maximum recommended task size is 100 KB.
¿Cómo se puede iterar a través de los valores distintos en una columna de una gran Pyspark trama de datos sin toparse con problemas de memoria?