Come trovare la dimensione RDD / Dataframe della scintilla?

So come trovare la dimensione del file in scala.Ma come trovare una dimensione RDD / dataframe in scintilla?

Scala:

object Main extends App { val file = new java.io.File("hdfs://localhost:9000/samplefile.txt").toString() println(file.length) } 

Scintilla:

 val distFile = sc.textFile(file) println(distFile.length) 

ma se lo elaboro non ottenendo la dimensione del file. Come trovare la dimensione RDD?

Se stai semplicemente cercando di contare il numero di righe nel rdd , fai:

 val distFile = sc.textFile(file) println(distFile.count) 

Se sei interessato ai byte, puoi utilizzare SizeEstimator :

 import org.apache.spark.util.SizeEstimator println(SizeEstimator.estimate(distFile)) 

https://spark.apache.org/docs/latest/api/java/org/apache/spark/util/SizeEstimator.html

Sì, finalmente ho trovato la soluzione. Includere queste librerie.

 import org.apache.spark.sql.Row import org.apache.spark.rdd.RDD import org.apache.spark.rdd import org.apache.spark.util.SizeEstimator 

Come trovare la dimensione RDD:

 def calcRDDSize(rdd: RDD[String]): Long = { rdd.map(_.getBytes("UTF-8").length.toLong) .reduce(_+_) //add the sizes together } 

Funzione per trovare la dimensione DataFrame: (Questa funzione converte solo DataFrame in RDD internamente)

 val dataFrame = sc.textFile(args(1)).toDF() // you can replace args(1) with any path val rddOfDataframe = dataFrame.rdd.map(_.toString()) val size = calcRDDSize(rddOfDataframe) 

Di seguito è riportato un modo a parte da SizeEstimator . Uso frequentemente

Per sapere dal codice su un RDD se è memorizzato nella cache, e più precisamente, quante delle sue partizioni sono memorizzate nella cache e quante sono memorizzate nella cache del disco? per ottenere il livello di archiviazione, si desidera anche conoscere lo stato attuale della memorizzazione nella cache. Per conoscere il consumo di memoria.

Spark Context ha il metodo API di sviluppo getRDDStorageInfo () Occasionalmente puoi usare questo.

Restituisce informazioni su quali RDD sono memorizzati nella cache, se sono in mem o su disco, quanto spazio occupano, ecc.

Per esempio :

 scala> sc.getRDDStorageInfo res3: Array[org.apache.spark.storage.RDDInfo] = Array(RDD "HiveTableScan [name#0], (MetastoreRelation sparkdb, firsttable, None), None " (3) StorageLevel: StorageLevel(false, true, false, true, 1); CachedPartitions: 1; 

TotalPartitions: 1; MemorySize: 256,0 B; ExternalBlockStoreSize: 0.0 B; DiskSize: 0.0 B)

Sembra che spark ui abbia usato lo stesso anche da questo codice

  • Vedi questo problema Fonte SPARK-17019 che descrive …

Descrizione
Con SPARK-13992, Spark supporta i dati persistenti nella memoria off-heap, ma l’utilizzo di off-heap non è esposto al momento, non è così conveniente per l’utente monitorare e profilo, quindi qui proponiamo di esporre anche la memoria fuori heap come l’utilizzo della memoria su heap in vari punti:

  1. La pagina dell’esecutore di Spark UI mostrerà l’utilizzo della memoria sia on-heap che off-heap.
  2. La richiesta REST restituisce sia memoria on-heap che off-heap.
  3. Anche questi due utilizzi della memoria possono essere ottenuti a livello di programmazione da SparkListener.