Nasıl yinelerler büyük Pyspark Dataframe bir sütununun belirgin değerlerinin yoluyla mı? .distinct (). toplamak () büyük bir görev uyarı yükseltir

oy
0

Büyük bir Pyspark Dataframe ait sütunda farklı değerlerin tüm yineleme yapmak için çalışıyorum. I () sadece iki ayrı değer olsa bile uyarı bir çok büyük bir görev yükseltir .distinct (). Toplamak kullanarak bunu yapmak çalıştığınızda. İşte bazı örnek kod:

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

Bu kod, data.select x in için hat ( a ) ifade eder, bu uyarı üreten ayrı () toplamak ()..:

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.

Nasıl bellek sorunları çalıştırmadan büyük Pyspark Dataframe sütunundaki farklı değerlere yineleyebilirsiniz?

Oluştur 13/01/2020 saat 23:54
kaynak kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
0

Bildiğiniz gibi, .collect()bir iyi uygulama değildir. Çünkü, bu sürücüye uygulayıcıları tüm verileri aktarmak bir eylem bu. Yani, farklı değerlerin bir sürü büyük dataframe içinde, toplamak hiç çalışmaz. Senin sorunun kökü Sürücü PVM içine uygulamacı JVM gelen tüm dağıtılmış veri getirmek istiyorum olmasıdır.

Yüksek düzeyde olarak, soruna yönelik bir çalışma etrafında disk değişimi belleğine olabilir.

Tek bir csv farklı değerler ile dataframe yazıp Python veya Pandalar * doğrultusunda yeniden hat okuyabilirsiniz:

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

Bu çözüm ile bellek ile herhangi bir sorun olmayacaktır.

* Python veya Pandalar ile büyük bir CSV okuma hakkında bir çok çözüme vardır.

Cevap 15/01/2020 saat 00:37
kaynak kullanıcı

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