2017-08-15 3 views
-2

Ich habe einen unter Datenrahmen Spark 1.6, möchte ich wie unter den Filtervariable innerhalb des Datenrahmen-Filter verwenden, aber Fehler.Funken scala Datenrahmen Fehler

val df = sc.parallelize(Seq(
("None", "a", "b"), ("c", "None", "d"), ("e", "f", "None"), ("g", "h", "i"))).toDF("A", "B", "C") 

val fil = """($"A" !== "None") && ($"B" !== "None") && ($"C" !== "None")""" 

Wenn ich laufen diese

df.where(fil).show 

ich diese Störung erhalte:

java.lang.RuntimeException: [1.2] failure: identifier expected 

    ($"A" !== "None") && ($"B" !== "None") && ($"C" !== "None") 
    ^
      at scala.sys.package$.error(package.scala:27) 
      at org.apache.spark.sql.catalyst.SqlParser$.parseExpression(SqlParser.scala:49) 
      at org.apache.spark.sql.DataFrame.where(DataFrame.scala:806) 

Bitte helfen.

Antwort

0

Verwenden Sie entweder die richtige SQL:

val fil = """A != "None" AND B != "None" AND C != "None"""" 

oder DSL (2.x)

val fil = ($"A" =!= "None") && ($"B" =!= "None") && ($"C" =!= "None") 

(1.x):

val fil = ($"A" !== "None") && ($"B" !== "None") && ($"C" !== "None") 
+0

wenn ich diese val fil do = ($ "A" =! = "None") && ($ "B" =! = "None") && ($ "C" =! = "None") fil wird von org.apache.spark.sql.Column Typ sein es funktioniert, aber wenn ich eine Zeichenfolge hwo habe, um das in org.apache.spark.sql.Column zu konvertieren, damit ich es im Datenrahmenfilter verwenden kann. Vielen Dank für Ihre Antwort – rubiks

0

Dieses "" "($" A“! == "None") & & ($ "B"! == "None") & & ($ "C"! == "None") "" "wurde als eine Zeichenfolge in der Where-Bedingung ersetzt.

Sie können Reihenfolge der Spaltennamen erstellen und diese Spalten in dem where Zustand direkt wie, columns.head beziehen == "None:" in dem Zustand direkt