Spark - хочу проверить пустой фрейм данных - isEmpty vs count [duplicate]

В моем случае я использовал одноэлементный класс, который может работать как глобальный объект, позволяющий получать доступ к данным почти везде в приложении. Прежде всего, нужно построить одноэлементный класс. Пожалуйста, обратитесь к странице, «. Как выглядит мой сингл Objective-C? « И то, что я сделал, чтобы сделать объект глобально доступным, просто импортировал его в appName_Prefix.pch, который предназначен для применения оператора импорта в все классы. Чтобы получить доступ к этому объекту и использовать его, я просто применил метод класса для возврата общего экземпляра, который содержит свои собственные переменные

42
задан auxdx 22 September 2015 в 02:52
поделиться

8 ответов

Вы можете использовать функции head() (или first()), чтобы увидеть, имеет ли DataFrame одну строку. Если это так, это не пусто.

13
ответ дан Aakil Fernandes 25 August 2018 в 22:16
поделиться

Для пользователей Java вы можете использовать это в наборе данных:

public boolean isDatasetEmpty(Dataset<Row> ds) {
        boolean isEmpty;
        try {
            isEmpty = ((Row[]) ds.head(1)).length == 0;
        } catch (Exception e) {
            return true;
        }
        return isEmpty;
}

Это проверяет все возможные сценарии (пустые, нулевые).

0
ответ дан Abdenaceur Lichiheb 25 August 2018 в 22:16
поделиться
df1.take(1).length>0

Метод take возвращает массив строк, поэтому, если размер массива равен нулю, в df нет записей.

0
ответ дан Arya McCarthy 25 August 2018 в 22:16
поделиться

Если вы делаете «df.count> 0». Он учитывает количество всех разделов для всех исполнителей и добавляет их в Driver. Это займет некоторое время, когда вы имеете дело с миллионами строк.

Лучший способ сделать это - выполнить «df.take (1)» и проверить, является ли его нулевым. Это вернет «java.util.NoSuchElementException», поэтому лучше попробовать «df.take (1)».

. Dataframe возвращает ошибку, когда take (1) выполняется вместо пустой строки , Я выделил конкретные строки кода, где он выдает ошибку.

3
ответ дан Nandakishore 25 August 2018 в 22:16
поделиться

В Scala вы можете использовать implicits для добавления методов isEmpty() и nonEmpty() в API DataFrame, что сделает код более приятным для чтения.

object DataFrameExtensions {
  implicit def extendedDataFrame(dataFrame: DataFrame): ExtendedDataFrame = 
    new ExtendedDataFrame(dataFrame: DataFrame)

  class ExtendedDataFrame(dataFrame: DataFrame) {
    def isEmpty(): Boolean = {
      Try{dataFrame.first.length != 0} match {
        case Success(_) => false
        case Failure(_) => true 
      }
    }

    def nonEmpty(): Boolean = !isEmpty
  }
}

Здесь другие методы также могут быть добавлены. Чтобы использовать неявное преобразование, используйте import DataFrameExtensions._ в файле, который вы хотите использовать расширенную функциональность. Впоследствии методы могут использоваться непосредственно так:

val df: DataFrame = ...
if (df.isEmpty) {
  // Do something
}
1
ответ дан Shaido 25 August 2018 в 22:16
поделиться

Я обнаружил, что в некоторых случаях:

>>>print(type(df))
<class 'pyspark.sql.dataframe.DataFrame'>

>>>df.take(1).isEmpty
'list' object has no attribute 'isEmpty'

это то же самое для «length» или replace take () head ()

[Solution] для проблемы, которую мы можно использовать.

>>>df.limit(2).count() > 1
False
0
ответ дан Shekhar Koirala 25 August 2018 в 22:16
поделиться

Вы можете сделать это как:

val df = sqlContext.emptyDataFrame
if( df.eq(sqlContext.emptyDataFrame) )
    println("empty df ")
else 
    println("normal df")
-1
ответ дан Stephen Rauch 25 August 2018 в 22:16
поделиться

Я бы сказал, чтобы просто захватить базовый RDD. В Scala:

df.rdd.isEmpty

в Python:

df.rdd.isEmpty()

Говоря все это, это вызов take(1).length, поэтому он будет делать то же, что ответил Рохан ... возможно, немного более явным?

35
ответ дан user6910411 25 August 2018 в 22:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: