it-swarm.com.de

Apache Spark: Anzahl der Datensätze pro Partition abrufen

Ich möchte prüfen, wie wir Informationen über jede Partition erhalten, wie z. B. Gesamtanzahl. von Datensätzen in jeder Partition auf der Treiberseite, wenn der Spark-Job im Bereitstellungsmodus als Garncluster übermittelt wird, um auf der Konsole zu protokollieren oder zu drucken.

7
nilesh1212

Sie können die Anzahl der Datensätze pro Partition folgendermaßen erhalten:

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

Dadurch wird jedoch auch ein Spark-Job von selbst gestartet (weil die Datei von spark gelesen werden muss, um die Anzahl der Datensätze zu erhalten). 

Spark könnte auch Statistiken zu Hive-Tabellen lesen, aber ich weiß nicht, wie ich diese Metadaten anzeigen soll.

12
Raphael Roth

Ich würde die eingebaute Funktion verwenden. Es sollte so effizient sein, wie es nur geht:

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

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

Spark 1.5 Lösung:

(sparkPartitionId() existiert in org.Apache.spark.sql.functions)

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

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

wie von @Raphael Roth erwähnt 

mapPartitionsWithIndex ist der beste Ansatz und wird seit dem RDD-basierten Ansatz mit allen Spark-Versionen funktionieren

2
Ram Ghadiyaram

Funke/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

Dasselbe ist für eine dataframe möglich, nicht nur für eine RDD. Fügen Sie einfach DF.rdd.glom... in den obigen Code ein.

Credits: Mike Dusenberry @ https://issues.Apache.org/jira/browse/SPARK-17817

0
Tagar