2017-05-17 2 views

Antwort

3

Verwenden rdd.isEmpty:

scala> Seq[(Long, String)]((1L, "a")).toDF.rdd.isEmpty 
res0: Boolean = false 

scala> Seq[(Long, String)]().toDF.rdd.isEmpty 

res1: Boolean true =

+0

Wird das schneller als zählen? –

3

Es könnte aber auch tun dies:

df.take(1).length == 0 

rdd.isEmpty implementiert die obige Funktionalität intern.

+0

Es kann noch schneller sein. Wenn wir '.rdd' aufrufen, kann Spark die Abfrage für einige Datenquellen, d. H. JDBC, nicht optimieren. Ihre Version verwendet alle möglichen Optimierungen –

+0

@ T.Gawęda Sind RDDs nicht die zugrunde liegenden Quellen von allem in Spark? Ich frage mich nur, ob 'df.rdd' viel Zeit braucht, wenn der Datenrahmen, sagen wir, eine Million Zeilen hat? – philantrovert

+1

Es wird von Datasets verwendet, aber wenn Sie eine Aktion für Dataset aufrufen, wenn Spark versucht, die Abfrage zu optimieren. Auch Aufruf von 'rdd' deserialisiert Zeilen vom internen Formular zum normalen - siehe http://stackoverflow.com/questions/43843470/how-to-know-which-count-query-is-the-fastest –

0

Verwenden isEmpty von RDD

def isEmpty(): Boolean = withScope { 
partitions.length == 0 || take(1).length == 0 

}

Verwandte Themen