2017-05-31 2 views

Antwort

3

Sie könnten versuchen, countApprox auf RDD API zu verwenden, obwohl dies auch einen Spark-Job startet, sollte es schneller sein, da es nur eine Schätzung der tatsächlichen Anzahl für eine bestimmte Zeit gibt, die Sie ausgeben möchten (Millisekunden) und a Konfidenzintervall (dh der probabilty, dass der wahre Wert innerhalb dieses Bereichs ist):

Beispiel Nutzung:

val cntInterval = df.rdd.countApprox(timeout = 1000L,confidence = 0.90) 
val (lowCnt,highCnt) = (cntInterval.initialValue.low, cntInterval.initialValue.high) 

Sie haben ein wenig mit den Parametern timeout und confidence zu spielen. Je höher die Zeitüberschreitung, desto genauer ist die geschätzte Anzahl.

+0

Vielen Dank, das ist genau das, was ich gesucht habe. – lovasoa

+0

Ein wenig Präzision. Wenn Sie wie ich eine einzelne Zahl und kein Intervall benötigen, sollten Sie die Vertrauenswürdigkeit auf 0 setzen (und somit einen einzelnen Wert für niedrig und hoch erhalten). Wenn Sie einen hohen Wert verwenden (wie den Standardwert 0,95) und dann den Mittelwert von "niedrig" und "hoch" verwenden, ist das Ergebnis weniger präzise. – lovasoa

1

Wenn Sie eine wirklich enorme Anzahl von Datensätzen haben, können Sie eine ungefähre Anzahl mit etwas wie HyperLogLog erhalten und dies könnte schneller sein als count(). Sie können jedoch kein Ergebnis erzielen, ohne einen Job zu starten. Wenn Sie Spark verwenden, gibt es zwei Arten von RDD-Operationen: transformations und actions. Grob gesagt modifizieren Transformationen eine RDD und geben eine neue RDD zurück. Aktionen berechnen oder generieren ein Ergebnis. Transformationen werden langsam ausgewertet, sodass sie erst dann einen Job starten, wenn eine Aktion am Ende einer Sequenz von Transformationen als Aktion bezeichnet wird.

Da Spark ein verteiltes Programmierframework ist, gibt es viel Aufwand für die Ausführung von Jobs. Wenn Sie etwas brauchen, das sich mehr wie "Echtzeit" anfühlt, verwenden Sie Basic Scala (oder Python), wenn Ihre Daten klein genug sind, oder gehen Sie zu einem Streaming-Ansatz über und aktualisieren Sie einen Zähler, wenn neue Datensätze fließen.

Verwandte Themen