Apache Spark: тестовый набор данных isEmpty? [Дубликат]

Да, есть. Используйте Type.GetNestedTypes() .

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

8 ответов

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

13
ответ дан Aakil Fernandes 15 August 2018 в 23:32
поделиться
  • 1
    если dataframe пуст, он бросает & quot; java.util.NoSuchElementException: next на пустой итератор & quot; ; [Искры 1.3.1] – FelixHo 26 May 2016 в 03:53

Для пользователей 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 15 August 2018 в 23:32
поделиться
df1.take(1).length>0

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

0
ответ дан Arya McCarthy 15 August 2018 в 23:32
поделиться

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

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

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

3
ответ дан Nandakishore 15 August 2018 в 23:32
поделиться
  • 1
    если вы запустите это на массивном массиве данных с миллионами записей, для которых метод count займет некоторое время. – TheM00s3 4 November 2016 в 18:35
  • 2
    Я сказал то же самое, я не уверен, почему ты дал большие пальцы. – Nandakishore 4 November 2016 в 20:13
  • 3
    ваше право, вы сказали то же самое, к несчастью, я не спустил вас вниз. – TheM00s3 4 November 2016 в 21:01
  • 4
    Ох, хорошо. Мне жаль TheMoos3, но кто бы это ни сделал, пожалуйста, наблюдайте за ответом и понимайте концепцию. – Nandakishore 6 November 2016 в 01:16
  • 5
    используя df.take (1), когда df пусто, приводит к возврату пустой ROW, которая не может сравниться с нулевым – LetsPlayYahtzee 16 March 2017 в 20:45

В 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 15 August 2018 в 23:32
поделиться

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

>>>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 15 August 2018 в 23:32
поделиться

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

val df = sqlContext.emptyDataFrame
if( df.eq(sqlContext.emptyDataFrame) )
    println("empty df ")
else 
    println("normal df")
-1
ответ дан Stephen Rauch 15 August 2018 в 23:32
поделиться
  • 1
    не потребует ли schema двух кадров данных (sqlContext.emptyDataFrame & amp; df) быть одинаковым, чтобы когда-либо вернуться true? – y2k-shubham 22 January 2018 в 14:59
  • 2
    Это не сработает. eq наследуется от AnyRef и проверяет, является ли аргумент (тот) ссылкой на объект-приемник (это). – user8371915 30 January 2018 в 02:32

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

df.rdd.isEmpty

в Python:

df.rdd.isEmpty()

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

35
ответ дан user6910411 15 August 2018 в 23:32
поделиться
  • 1
    Это удивительно медленнее, чем df.count () == 0 в моем случае – architectonic 2 December 2015 в 13:40
  • 2
    На самом деле, нет. RDD по-прежнему являются основой всего Spark по большей части. – Justin Pihony 17 February 2016 в 04:13
  • 3
    Не конвертируйте df в RDD. Это замедляет процесс. Если вы конвертируете его, он преобразует весь DF в RDD и проверяет, пуст ли он. Подумайте, есть ли у DF миллионы строк, для преобразования в RDD требуется много времени. – Nandakishore 1 November 2016 в 22:18
  • 4
    .rdd замедляет так много процесса, как много – Raul H 9 November 2016 в 23:04
  • 5
    отличный ответ, спасибо! – Sohum Sachdev 24 August 2017 в 07:31
  • 6
    Для тех, кто использует pyspark. isEmpty - это не вещь. Делают len (d.head (1)) & gt; 0 вместо этого. – Donald Vetal 21 November 2017 в 17:39
  • 7
    почему это лучше, чем df.rdd.isEmpty? – Dan Ciborowski - MSFT 20 January 2018 в 04:33
  • 8
    Если вы вызовете метод rdd isEmpty на большом фреймворке данных, он будет чрезвычайно замедлять его, особенно когда кадр данных не кэшируется. – Abdul Mannan 16 February 2018 в 14:37
Другие вопросы по тегам:

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