Вы можете использовать функции head()
(или first()
), чтобы увидеть, имеет ли DataFrame
одну строку. Если это так, это не пусто.
Для пользователей Java вы можете использовать это в наборе данных:
public boolean isDatasetEmpty(Dataset<Row> ds) {
boolean isEmpty;
try {
isEmpty = ((Row[]) ds.head(1)).length == 0;
} catch (Exception e) {
return true;
}
return isEmpty;
}
Это проверяет все возможные сценарии (пустые, нулевые).
df1.take(1).length>0
Метод take
возвращает массив строк, поэтому, если размер массива равен нулю, в df
нет записей.
Если вы делаете «df.count> 0». Он учитывает количество всех разделов для всех исполнителей и добавляет их в Driver. Это займет некоторое время, когда вы имеете дело с миллионами строк.
Лучший способ сделать это - выполнить «df.take (1)» и проверить, является ли его нулевым. Это вернет «java.util.NoSuchElementException», поэтому лучше попробовать «df.take (1)».
. Dataframe возвращает ошибку, когда take (1) выполняется вместо пустой строки , Я выделил конкретные строки кода, где он выдает ошибку.
count
займет некоторое время.
– TheM00s3
4 November 2016 в 18:35
В 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
}
Я обнаружил, что в некоторых случаях:
>>>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
Вы можете сделать это как:
val df = sqlContext.emptyDataFrame
if( df.eq(sqlContext.emptyDataFrame) )
println("empty df ")
else
println("normal df")
schema
двух кадров данных (sqlContext.emptyDataFrame
& amp; df
) быть одинаковым, чтобы когда-либо вернуться true
?
– y2k-shubham
22 January 2018 в 14:59
eq
наследуется от AnyRef
и проверяет, является ли аргумент (тот) ссылкой на объект-приемник (это). i>
– user8371915
30 January 2018 в 02:32
Я бы сказал, чтобы просто захватить базовый RDD
. В Scala:
df.rdd.isEmpty
в Python:
df.rdd.isEmpty()
Говоря все это, это вызов take(1).length
, поэтому он будет делать то же, что ответил Рохан ... возможно, немного более явным?
isEmpty
на большом фреймворке данных, он будет чрезвычайно замедлять его, особенно когда кадр данных не кэшируется.
– Abdul Mannan
16 February 2018 в 14:37