Как проверить, свободен ли световой кадр в pyspark [duplicate]

Я знаю, что это избитый предмет, но для тех, кто хочет ответить на этот вопрос с наклоном SWIFT и хочет пример с голубыми костями, вот мой метод go-to для передачи данных, если вы используете segue, чтобы обойти.

Это похоже на вышесказанное, но без кнопок, меток и т. д. Просто передавайте данные с одного вида на другой.

Настройка Раскадровка

Есть три части.

  1. Отправитель
  2. Segue
  3. Приемник

Это очень простой макет представления с segue между ними.



Вот настройка для отправителя



Вот настройка приемника.



Наконец, настройка для сеанса.



Контроллеры просмотра

Мы придерживаемся этого простого поэтому никаких кнопок, а не действий, мы просто перемещаем данные от отправителя к получателю, когда приложение загружается, а затем выводит переданное значение на консоль.

Эта страница берет первоначально загруженное значение и передает его .

//
//  ViewControllerSender.swift
//  PassDataBetweenViews
//
//  Created by Chris Cantley on 8/25/15.
//  Copyright (c) 2015 Chris Cantley. All rights reserved.
//

import UIKit


class ViewControllerSender: UIViewController {

    // THE STUFF - put some info into a variable
    let favoriteMovie = "Ghost Busters"


    override func viewDidAppear(animated: Bool) {
        // PASS IDENTIFIER - go to the recieving view controller.
        self.performSegueWithIdentifier("goToReciever", sender: self)
    }

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

        //GET REFERENCE - ...to the receiver view.
        var viewControllerReceiver = segue.destinationViewController as? ViewControllerReceiver

        //PASS STUFF - pass the variable along to the target.
        viewControllerReceiver!.yourFavMovie = self.favoriteMovie

    }

}

Эта страница просто отправляет значение переменной на консоль при ее загрузке. К этому моменту наш любимый фильм должен быть в этой переменной.

//
//  ViewControllerReceiver.swift
//  PassDataBetweenViews
//
//  Created by Chris Cantley on 8/25/15.
//  Copyright (c) 2015 Chris Cantley. All rights reserved.
//

import UIKit

class ViewControllerReceiver: UIViewController {

    //Basic empty variable waiting for you to pass in your fantastic favorite movie.
    var yourFavMovie = ""

    override func viewDidLoad() {
        super.viewDidLoad()


        //And now we can view it in the console.
        println("The Movie is \(self.yourFavMovie)")

    }



}

Вот как вы можете справиться с этим, если хотите использовать segue, и у вас нет страниц под навигационным контроллером.

После запуска он должен автоматически переключиться на вид приемника и передать значение от отправителя в приемник, отображая значение в консоли.

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

9 ответов

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

13
ответ дан Aakil Fernandes 23 August 2018 в 18: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 23 August 2018 в 18:16
поделиться
df1.take(1).length>0

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

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

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

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

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

3
ответ дан Nandakishore 23 August 2018 в 18: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 23 August 2018 в 18: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 23 August 2018 в 18:16
поделиться

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

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

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

df.rdd.isEmpty

в Python:

df.rdd.isEmpty()

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

41
ответ дан user6910411 23 August 2018 в 18:16
поделиться

Для Spark 2.1.0 моим предложением было бы использовать head(n: Int) или take(n: Int) с isEmpty, в зависимости от того, что имеет самое ясное намерение для вас.

df.head(1).isEmpty
df.take(1).isEmpty

с эквивалентом Python:

len(df.head(1)) == 0  # or bool(df.head(1))
len(df.take(1)) == 0  # or bool(df.take(1))

Используя df.first() и df.head(), оба будут возвращать java.util.NoSuchElementException, если DataFrame пуст. first() вызывает head() напрямую, что вызывает head(1).head.

def first(): T = head()
def head(): T = head(1).head

head(1) возвращает массив, поэтому, принимая head в этом массиве, вызывает java.util.NoSuchElementException, когда DataFrame пуст .

def head(n: Int): Array[T] = withAction("head", limit(n).queryExecution)(collectFromPlan)

Поэтому вместо вызова head() используйте head(1) непосредственно, чтобы получить массив, а затем вы можете использовать isEmpty.

take(n) также эквивалентно to head(n) ...

def take(n: Int): Array[T] = head(n)

И limit(1).collect() эквивалентно head(1) (уведомление limit(n).queryExecution в методе head(n: Int)), поэтому следующие эквиваленты, по крайней мере, от что я могу сказать, и вам не придется поймать исключение java.util.NoSuchElementException, когда DataFrame пуст.

df.head(1).isEmpty
df.take(1).isEmpty
df.limit(1).collect().isEmpty

Я знаю, что это более старый вопрос, поэтому, надеюсь, это поможет кому-то, кто использует новый версия Spark.

41
ответ дан user6910411 23 August 2018 в 18:17
поделиться
Другие вопросы по тегам:

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