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.NoSuchElementException
jeś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 head
tego 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).queryExecution
w 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.NoSuchElementException
wyją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.