Unterschied zwischen filter und wo in scala spark sql
Habe schon beides ausprobiert, aber es funktioniert gleich
Beispiel
val items = List(1, 2, 3)
mit filter
employees.filter($"emp_id".isin(items:_*)).show
verwenden, wo
employees.where($"emp_id".isin(items:_*)).show
Ergebnis ist dasselbe für die beiden
+------+------+------+-------+------+-------+
|EMP_ID|F_NAME|SALARY|DEPT_ID|L_NAME|MANAGER|
+------+------+------+-------+------+-------+
| 6| E6| 2000| 4| L6| 2|
| 7| E7| 3000| 4| L7| 1|
| 8| E8| 4000| 2| L8| 2|
| 9| E9| 1500| 2| L9| 1|
| 10| E10| 1000| 2| L10| 1|
| 4| E4| 400| 3| L4| 1|
| 2| E2| 200| 1| L2| 1|
| 3| E3| 700| 2| L3| 2|
| 5| E5| 300| 2| L5| 2|
+------+------+------+-------+------+-------+
Du musst angemeldet sein, um einen Kommentar abzugeben.
where
- Dokumentation:filter
ist einfach die standard-Scala (und FP im Allgemeinen) Namen für eine solche Funktion, undwhere
ist für Leute, die lieber SQL.nur
FYI
,maxTsunx.filter(r => r.get(0) == 1)
maxTsunx.where(col("ticker_id")===1)
oder
maxTsunx.filter(col("ticker_id")===1)
Im ersten Fall, die übergabe-Funktion filter-Funktion
Im zweiten Fall, Weitergabe-Bedingung-Ausdruck (entweder string oder Spalte Typ) zu filtern oder der where-Funktion.
Physische plan 2 ist auch möglich durch den Austausch
where
mit filter-Funktion.Ist es im Zusammenhang auch mit Funken-Optimierung. Blick auf kurzes Beispiel:
Große Parkett-Datei im HDFS mit Struktur und Daten:
Wobei jede partition die Partitionen innerhalb (Datum)
Struktur:
Zum Beispiel, Sie haben DS so:
enthält max(db_tsunx) für jede ticker_id
F. E.: Sie möchten die Daten nur für nur ein ticker von diesem DS
Haben Sie 2 Möglichkeiten:
und es ist eine ganz andere "Physischen Plan"
anschauen
1)
2)
Vergleichen Sie 162 und 6 und
PartitionFilters: [],
PartitionFilters: [isnotnull(ticker_id#84), (ticker_id#84 = 1)],
Bedeutet es, dass die filter-Aktion, die auf Daten von DS-und wo gehen Sie hinein Funken und zur Optimierung verwendet werden.