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?
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)
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
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)
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:
- La page exécuteur de Spark UI affiche l’utilisation de la mémoire sur tas et hors tas.
- La demande REST renvoie à la fois la mémoire sur tas et la mémoire hors tas.
- De plus, ces deux utilisations de mémoire peuvent être obtenues par programme à partir de SparkListener.