chcę przekonwertować RDD do DataFrame i chcą buforować wyniki RDD:buforowanie nakazał Spark DataFrame tworzy niechciane zadanie
from pyspark.sql import *
from pyspark.sql.types import *
import pyspark.sql.functions as fn
schema = StructType([StructField('t', DoubleType()), StructField('value', DoubleType())])
df = spark.createDataFrame(
sc.parallelize([Row(t=float(i/10), value=float(i*i)) for i in range(1000)], 4), #.cache(),
schema=schema,
verifySchema=False
).orderBy("t") #.cache()
- Jeśli nie używać
cache
funkcji nie jest praca wygenerowany. - Jeśli używasz
cache
tylko poorderBy
1 pracy jest generowany dlacache
: - Jeśli używasz
cache
dopiero poparallelize
praca nie jest generowany.
Dlaczego cache
generuje pracę w tym jednym przypadku? Jak mogę uniknąć generowania zleceń z cache
(buforowanie DataFrame i brak RDD)?
Edit: badałem bardziej na problem i okazało się, że bez orderBy("t")
nie praca jest generowany. Czemu?
Wraz z aktualizacjami wyjaśniającymi pytanie, usunąłem oryginalną odpowiedź. To interesujące pytanie, ponieważ orderBy ("t") jest leniwie oceniany tak, jak powinien, a cache() bez orderBy jest również leniwie oceniany, ale razem też nie jestem pewien, dlaczego coś jest wykonywane dla operacji czysto transformatora. – Garren