... controllando se il valore di una colonna è in un seq
.
Forse non lo sto spiegando molto bene, fondamentalmente lo voglio (per esprimerlo usando SQL regolare): DF_Column IN seq
?Qual è il modo più efficiente per filtrare un DataFrame
Prima l'ho fatto utilizzando un broadcast var
(dove ho inserito il seq), UDF
(che ha fatto il controllo) e registerTempTable
.
Il problema è che non ho avuto modo di testarlo da quando mi sono imbattuto in un known bug che apparentemente appare solo quando si utilizza registerTempTable
con ScalaIDE.
Ho finito per creare un nuovo DataFrame
su seq
e fare join interno con esso (intersezione), ma dubito che sia il modo più performante per eseguire l'operazione.
Grazie
EDIT: (in risposta a @YijieShen):
come fare filter
base al fatto che gli elementi di una DataFrame
's colonna sono nella colonna di un'altra DF (come SQL select * from A where login in (select username from B)
)?
es: Prima DF:
login count
login1 192
login2 146
login3 72
Secondo DF:
username
login2
login3
login4
Il risultato:
login count
login2 146
login3 72
Tentativi:
EDIT-2: Penso che ora che il bug sia corretto, dovrebbero funzionare.END EDIT-2
ordered.select("login").filter($"login".contains(empLogins("username")))
e
ordered.select("login").filter($"login" in empLogins("username"))
cui entrambi tiro Exception in thread "main" org.apache.spark.sql.AnalysisException
, rispettivamente:
resolved attribute(s) username#10 missing from login#8 in operator
!Filter Contains(login#8, username#10);
e
resolved attribute(s) username#10 missing from login#8 in operator
!Filter login#8 IN (username#10);
Qual è la dimensione del 'Seq'? –
Piccolo, attualmente 100 elementi e non dovrebbe mai superare i 10k. –
Come si usa la DSL di dataFrame invece di sql? –