Jak se vám iterovat odlišnými hodnotami sloupci ve velkém Pyspark datovém? .distinct (). sbírání () vyvolává velké varování úkolu

hlasů
0

Snažím iterovat všechny odlišné hodnoty ve sloupci velkého Pyspark datový rámec. Když se snažím, aby to s použitím .distinct (). Sbírání () vznáší „úkol příliš velký“ varování, i když existují pouze dvě rozdílné hodnoty. Tady je nějaký ukázkový 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])+')

Tento kód vytváří toto upozornění, které odkazuje na řádek „pro x v data.select (“ A „), odlišný () sběrná ().“.:

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.

Jak můžete iterovat odlišnými hodnotami ve sloupci velkého Pyspark datovém bez spuštění do paměti problémy?

Položena 13/01/2020 v 23:54
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
0

Jak již víte, .collect()není nejvhodnější. Vzhledem k tomu, že je to akce, která přenést všechna data z exekutorů řidiče. Takže ve velkém datovém se spoustou odlišných hodnot, sběrná nebude fungovat vůbec. Váš problém kořen je, že chcete, aby všechny své distribuovaných dat z exekutorů JVM do PVM řidiče.

Ve vysoké úrovni, je vyřešit váš problém by mohlo být výměnné paměti s diskem.

Můžete napsat svůj datový rámec s odlišnými hodnotami v jednom formátu CSV a potom si přečtěte to znovu řádek po řádku s Python nebo pandy *:

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

S tímto řešením nebudete mít žádný problém s pamětí.

* Existuje mnoho řešení, o tom, jak číst velký soubor CSV s Python nebo pandy.

Odpovězeno 15/01/2020 v 00:37
zdroj uživatelem

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