Hogyan halad végig a különböző értékek egy oszlop egy nagy Pyspark Dataframe? .distinct (). collect () felvet egy nagy feladat figyelmeztetés

szavazat
0

Próbálom végiglépdelni az egyedi értékek oszlopában nagy Pyspark Dataframe. Amikor megpróbálok csinálni a .distinct (). Collect () felveti a „feladat túl nagy” figyelmeztetés akkor is, ha csak két különböző értéket. Itt van néhány minta kód:

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

Ez a kód termel ez a figyelmeztetés arra utal, hogy a vonal „az x data.select (” a „). Elkülönült (). 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.

Hogyan lehet végighaladni egyedi értékek oszlopon nagy Pyspark Dataframe nélkül fut be a memória problémák?

A kérdést 13/01/2020 23:54
a forrás felhasználó
Más nyelveken...                            


1 válasz

szavazat
0

Mint már tudjuk, .collect()nem a legjobb gyakorlatot. Mert ez olyan intézkedésre, amely át az összes adatot végrehajtók a vezető számára. Tehát, egy nagy dataframe sok különböző értékek, a gyűjtés nem fog működni. A probléma gyökere az, hogy azt akarjuk, hogy az összes szétosztott adatok a végrehajtók JVM a vezetőfülkébe PVM.

A magas szintű, a munka körül a probléma lehet, hogy csere memória lemezre.

Megírhatjuk dataframe az egyedi értékek egy csv, majd olvasd el újra soronként Python vagy Pandák *:

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

Ezzel a megoldással nem lesz gond a memóriával.

* Van egy csomó megoldást, hogyan kell olvasni egy nagy CSV Python vagy Panda.

Válaszolt 15/01/2020 00:37
a forrás felhasználó

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