2014-07-17 15 views
7

Sto provando la funzione persist in Spark per mantenere i dati in memoria e fare calcoli su di esso. Sono sotto il presupposto che l'archiviazione dei dati in memoria renderebbe i calcoli più veloci per algoritmi iterativi come K-means clustering in MLlib.Persistenza in memoria non funzionante in Spark

val data3 = sc.textFile("hdfs:.../inputData.txt") 
    val parsedData3 = data3.map(_.split('\t').map(_.toDouble)) 
    parsedData3.persist(MEMORY_ONLY) 

La chiamata a persistere tiri il seguente errore:

scala> parsedData3.persist(MEMORY_ONLY) 
    <console>:17: error: not found: value MEMORY_ONLY 
        parsedData3.persist(MEMORY_ONLY) 

Qualcuno mi potrebbe aiutare con come utilizzare correttamente persistere per salvare un dati in memoria per l'uso in un algoritmo iterativo?

+0

'errore: non trovato: il valore MEMORY_ONLY' - lo effettivamente letto questo ?! ;) – samthebest

+0

rendersi conto che questa non è una domanda Java per la gente Java che legge questo, non dimenticare di mettere la parentesi alla fine: StorageLevel.MEMORY_ONLY_SER() e utilizzare import org.apache.spark.storage.StorageLevel; – JimLohse

risposta

14

Se si guarda alla firma del rdd.persist essere: def persist(newLevel: StorageLevel): this.type si può vedere che ci vuole un valore di tipo 'StorageLevel', quindi il modo corretto chiamare persistere nel tuo esempio potrebbe essere:

parsedData3.persist(StorageLevel.MEMORY_ONLY) 

Il compagna oggetto di StorageLevel definisce queste costanti, in modo da portarlo in contesto vi permetterà di utilizzare la costante direttamente (come nel codice)

import org.apache.spark.storage.StorageLevel._ 
... 
parsedData3.persist(MEMORY_ONLY) // this also works 
+0

o 'parsedData3.persist()' poiché 'MEMORY_ONLY' è l'impostazione predefinita – aaronman