web-dev-qa-db-fra.com

Apache Spark: Obtenez le nombre d'enregistrements par partition

Je souhaite vérifier comment obtenir des informations sur chaque partition, telles que le nombre total. d’enregistrements dans chaque partition côté pilote lorsque le travail Spark est soumis avec le mode de déploiement sous la forme d’un cluster de fils afin de se connecter ou d’imprimer sur la console.

7
nilesh1212

Vous pouvez obtenir le nombre d'enregistrements par partition de la manière suivante:

df
  .rdd
  .mapPartitionsWithIndex{case (i,rows) => Iterator((i,rows.size))}
  .toDF("partition_number","number_of_records")
  .show

Mais cela lancera également un Job Spark tout seul (car le fichier doit être lu par spark pour obtenir le nombre d'enregistrements). 

Spark pourrait également lire les statistiques de la table Hive, mais je ne sais pas comment afficher ces métadonnées.

12
Raphael Roth

J'utiliserais la fonction intégrée. Il devrait être aussi efficace que possible:

import org.Apache.spark.sql.functions.spark_partition_id

df.groupBy(spark_partition_id).count
11
hi-zir

Solution Spark 1.5:

(sparkPartitionId() existe dans org.Apache.spark.sql.functions)

import org.Apache.spark.sql.functions._ 

df.withColumn("partitionId", sparkPartitionId()).groupBy("partitionId").count.show

comme mentionné par @Raphael Roth 

mapPartitionsWithIndex est la meilleure approche, fonctionnera avec toutes les versions de spark depuis son approche basée sur le DDR

2
Ram Ghadiyaram

Étincelle/scala:

val numPartitions = 20000
val a = sc.parallelize(0 until 1e6.toInt, numPartitions )
val l = a.glom().map(_.length).collect()  # get length of each partition
print(l.min, l.max, l.sum/l.length, l.length)  # check if skewed

PySpark:

num_partitions = 20000
a = sc.parallelize(range(int(1e6)), num_partitions)
l = a.glom().map(len).collect()  # get length of each partition
print(min(l), max(l), sum(l)/len(l), len(l))  # check if skewed

La même chose est possible pour un dataframe, pas seulement pour un RDD. Ajoutez simplement DF.rdd.glom... dans le code ci-dessus.

Crédits: Mike Dusenberry @ https://issues.Apache.org/jira/browse/SPARK-17817

0
Tagar