Hvordan gjør du iterere gjennom distinkte verdier i en kolonne i en stor Pyspark Dataframe? .distinct (). collect () reiser en stor oppgave advarsel

stemmer
0

Jeg prøver å iterere gjennom alle de forskjellige verdiene i kolonne i et stort Pyspark Dataframe. Når jeg prøver å gjøre det ved hjelp .distinct (). Collect () det reiser en oppgave for stor advarsel, selv om det bare er to forskjellige verdier. Her er noen eksempelkode:

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])+')

Denne koden frembringer denne advarsel som gjelder en linje for x i data.select ( a ) distinkt () samler ()..:

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.

Hvordan kan du iterere gjennom distinkte verdier i en kolonne med et stort Pyspark Dataframe uten å kjøre inn minneproblemer?

Publisert på 13/01/2020 klokken 23:54
kilden bruker
På andre språk...                            


1 svar

stemmer
0

Som du allerede vet, .collect()er ikke en beste praksis. Fordi, det er en handling som overfører alle data fra arvtakere til sjåføren. Så, i en stor dataframe med mye forskjellige verdier, collect vil ikke fungere i det hele tatt. Ditt problem rot er at du ønsker å ta med alle dine distribuerte data fra etterfølgerne JVM i driveren PVM.

I et høyt nivå, kan en omgå for problemet ditt være å utveksle minne med disk.

Du kan skrive dataframe med tydelige verdier i en csv og deretter lese det igjen linje for linje med Python eller pandaer *:

data.select("a").distinct().coalesce(1).write.csv("temp.csv")
# Specifically, it's a directory with one csv.

Med denne løsningen vil du ikke ha noen problemer med hukommelsen.

* Det er mange løsninger om hvordan å lese en stor CSV med Python eller pandaer.

Svarte 15/01/2020 kl. 00:37
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more