2015-07-09 12 views

Odpowiedz

34

miałem ten sam problem, a następująca składnia pracował dla mnie:

df.filter(df("state")==="TX").show() 

Używam Spark 1.6.

+1

nie działa dla mnie w 1.6. Muszę użyć nawiasów w celu podzbioru ramki danych, np. 'df.filter (df [" stan "] ==" TX "). show()' –

+0

Twój sugerowany format nie kompiluje się dla mnie. czy jesteś pewien, że typem Df jest DataFrame? – user3487888

+1

Składnia z nawiasami to PySpark. Ten z nawiasem to Scala – PinoSan

11

Powinieneś używać where, select jest projekcją, która zwraca dane wyjściowe instrukcji, a więc dlaczego otrzymujesz wartości logiczne. where to filtr, który zachowuje strukturę ramki danych, ale zachowuje tylko dane tam, gdzie działa filtr.

Wzdłuż tej samej linii, choć za dokumentacji, można napisać to w 3 różnych sposobów

// The following are equivalent: 
peopleDf.filter($"age" > 15) 
peopleDf.where($"age" > 15) 
peopleDf($"age" > 15) 
+0

Ja tylko starałem df.filter ($ "state" == "TX"), to nie działa. błąd: przeciążony filtr wartości metody z alternatywami: (conditionExpr: String) org.apache.spark.sql.DataFrame (warunek: org.apache.spark.sql.Column) org.apache.spark.sql.DataFrame nie można zastosować do (Boolean) – Instinct

+0

Wydaje się to jednak działać. df.select ("stan"). gdzie (df ("stan") === "TX"). count – Instinct

+10

'df.filter ($" stan "===" TX ")' powinno działać. Trzeba użyć tutaj potrójnej równości, która zwraca kolumnę -> https://spark.apache.org/docs/1.3.0/api/scala/index.html#org.apache.spark.sql.Column –

16

Istnieje jeszcze jedna prosta opcja typu sql. Spark 1.6 również powinien działać.

df.filter("state = 'TX'") 

Jest to nowy sposób określania filtrów podobnych do sql. Aby uzyskać pełną listę obsługiwanych operatorów, sprawdź klasę this.

6

df.filter($"state" like "T%%") za wzór pasujący

df.filter($"state" === "TX") lub df.filter("state = 'TX'") równości

5

Aby uzyskać negację, to zrobić ...

df.filter(not(..expression..)) 

np

df.filter(not($"state" === "TX")) 
+1

lub możesz też nie być równy "df.filter ($" stan "! ==" TX ")' – stevevls

3

Możemy napisać wielokrotność Filtruj/gdzie warunki w Dataframe.

. Na przykład:

table1_df 
.filter($"Col_1_name" === "buddy") // check for equal to string 
.filter($"Col_2_name" === "A") 
.filter(not($"Col_2_name".contains(" .sql"))) // filter a string which is not relevent 
.filter("Col_2_name is not null") // no null filter 
.take(5).foreach(println) 
0

Pracował nad Spark V2 *

import sqlContext.implicits._ 
df.filter($"state" === "TX") 

jeśli musi być porównywane zmiennej (np var):

import sqlContext.implicits._ 
df.filter($"state" === var) 
Powiązane problemy