2016-09-16 2 views
1

Ich habe eine spezifische Anforderung, bei der ich auf leeren DataFrame überprüfen muss. Wenn leer, füllen Sie einen Standardwert. Hier ist, was ich versuchte, aber nicht bekommen, was ich will.Spark Scala - Handhabung leerer DataFrame

def checkNotEmpty(df: org.apache.spark.sql.DataFrame, col: String):org.apache.spark.sql.DataFrame = 
{ 
if (!df.rdd.isEmpty()) df 
    else 
    df.na.fill(0, Seq(col)) 
} 

val age = checkNotEmpty(w_feature_md.filter("age='22'").select("age_index"),"age_index") 

Die Idee ist, das df zu bekommen, wenn es nicht leer ist. Wenn es leer ist, geben Sie einen Standardwert von NULL ein. Das scheint nicht zu funktionieren. Das Folgende ist, was ich bekomme.

scala> age.show 
+---------+ 
|age_index| 
+---------+ 
+---------+ 

Bitte helfen ..

Antwort

2
def checkNotEmpty(df: org.apache.spark.sql.DataFrame, col: String):org.apache.spark.sql.DataFrame = 
    { 
    if (!df.rdd.isEmpty()) df 
     else 
     df.na.fill(0, Seq(col)) 
    } 

In Ihrer Methode:

geht die Steuerung zu if Teil, wenn die df is not empty.

Und geht zu else Teil, wenn df is empty.

df.na (org.apache.spark.sql.DataFrameNaFunctions): Funktionalität zum Arbeiten mit fehlenden Daten in DataFrames.
Da Sie verwenden, gibt es nichts zu ersetzen, daher ist das Ergebnis immer empty.

Überprüfen Sie diese ques für mehr zum Ersetzen von Nullwerten in df.

+0

Danke @ p2. Gibt es eine Möglichkeit, einen Standardwert von zu füllen, wenn es leer ist –

+0

danke nochmal. Es funktioniert immer noch nicht wie erwartet. ' def checkNotEmpty (df: org.apache.spark.sql.DataFrame, col: String): org.apache.spark.sql.DataFrame = { \t if (df.rdd.isEmpty()) \t { \t println ("hier"); \t df.na.fill (0.0, Seq (col)) \t} \t sonst \t df } ' Ich versuchte, die auch oben. Der Wert ist nicht NULL, aber leer und daher denke ich nicht ** df.na.fill ** funktioniert in diesem Fall. –

+0

überprüfen Sie diese Fragen: http://StackOverflow.com/Questions/33376571/Replace-Null- value-in-spark-dataframe –

Verwandte Themen