W przypadku Spark 2.1.0 moja sugestia byłaby taka, aby użyć head(n: Int)lub take(n: Int)z isEmpty, w zależności od tego, który ma dla ciebie najwyraźniejszy zamiar.
df.head(1).isEmpty
df.take(1).isEmpty
z odpowiednikiem w Pythonie:
len(df.head(1)) == 0 # or bool(df.head(1))
len(df.take(1)) == 0 # or bool(df.take(1))
Użycie df.first()i df.head()zwróci, java.util.NoSuchElementExceptionjeśli DataFrame jest pusta. first()dzwoni head()bezpośrednio, co woła head(1).head.
def first(): T = head()
def head(): T = head(1).head
head(1)zwraca Array, więc przyjęcie headtego Array powoduje java.util.NoSuchElementException, że DataFrame jest pusta.
def head(n: Int): Array[T] = withAction("head", limit(n).queryExecution)(collectFromPlan)
Więc zamiast wywoływać head(), użyj head(1)bezpośrednio, aby uzyskać tablicę, a następnie możesz użyć isEmpty.
take(n)jest również równoważne z head(n)...
def take(n: Int): Array[T] = head(n)
I limit(1).collect()jest równoważne head(1)(zauważ limit(n).queryExecutionw head(n: Int)metodzie), więc wszystkie poniższe są równoważne, przynajmniej z tego, co mogę powiedzieć, i nie będziesz musiał łapać java.util.NoSuchElementExceptionwyjątku, gdy DataFrame jest pusta.
df.head(1).isEmpty
df.take(1).isEmpty
df.limit(1).collect().isEmpty
Wiem, że jest to starsze pytanie, więc mam nadzieję, że pomoże to komuś korzystającemu z nowszej wersji Sparka.