web-dev-qa-db-fra.com

Comment trouver la taille spark RDD / Dataframe?

Je sais comment trouver la taille du fichier dans scala.Mais comment trouver une taille de RDD/dataframe dans spark?

Scala:

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

Étincelle:

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

mais si je le traite ne pas obtenir la taille du fichier. Comment trouver la taille du RDD?

26
Venu A Positive

Oui enfin j'ai eu la solution. Inclure ces bibliothèques.

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

Comment trouver la taille RDD:

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

Fonction pour trouver la taille de DataFrame: (Cette fonction convertit simplement DataFrame en RDD en interne)

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)
11
Venu A Positive

Si vous cherchez simplement à compter le nombre de lignes dans le rdd, faites:

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

Si les octets vous intéressent, vous pouvez utiliser le 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

47

Voici un moyen en dehors de SizeEstimator que j’utilise fréquemment

Pour savoir à partir du code d'un RDD s'il est mis en cache, et plus précisément combien de ses partitions sont mises en cache en mémoire et combien sont en cache sur le disque? Pour obtenir le niveau de stockage, vous souhaitez également connaître l'état actuel de la mise en cache. Connaître la consommation de mémoire.

Spark Context a une méthode api de développeur getRDDStorageInfo () Parfois, vous pouvez l'utiliser.

Retourne des informations sur les RDD mis en cache, s'ils sont en mémoire ou sur disque, combien d'espace ils prennent, etc.

Par exemple :

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;

Total Partitions: 1; MemorySize: 256.0 B; ExternalBlockStoreSize: 0.0 B; Taille du disque: 0.0 B)

On dirait que spark ui a également utilisé la même chose à partir de ceci code

Description
Avec SPARK-13992, Spark prend en charge les données persistantes dans la mémoire off-tas, mais l'utilisation de off-heap n'est pas exposée pour le moment, il n'est pas très pratique pour l'utilisateur de surveiller et profile, alors proposez ici d'exposer la mémoire off-tas ainsi que l'utilisation de la mémoire on-tas à divers endroits:

  1. La page exécuteur de Spark UI affiche l’utilisation de la mémoire sur tas et hors tas.
  2. La demande REST renvoie à la fois la mémoire sur tas et la mémoire hors tas.
  3. De plus, ces deux utilisations de mémoire peuvent être obtenues par programme à partir de SparkListener.
7
Ram Ghadiyaram