Was ist die beste gleichwertig mit Spark-Datenrahmen würde
Spark-Update Spaltenwert in einem Dataframe
update table1 set colx = "some value" where coly in (select coltab2 from table2 where [another condition)]
ich eine Arbeitslösung muss SQL, aber ich bin wirklich nicht sehr zufrieden mit ihm. Sieht wirklich umständlich und ich hoffe, dass ich eine einfachere Art und Weise verpassen
Zuerst bekomme ich den Wert für die where-Klausel (es könnte Tausende sein, damit ich eine Sammlung nicht benutzen Stab)
val df2 = xxxx.select("coltab2")
df2: org.apache.spark.sql.DataFrame = [coltab2: string]
dieser Datenrahmen enthält Alle Werte, die ich in der WHERE-Klausel beibehalten möchte
Dann führe ich eine linke äußere Verbindung mit Tabelle1, um coltab2 auf df2.coltab2=df1.coly
hinzuzufügen. Wenn der Wert des zugegebenen coltab2 nicht null bedeutet dies, dass es in table2 vorlag so verwende ich diese Bedingung eine andere Spalte von der ursprünglichen tabelle1 zu aktualisieren (df1) und dann diese zusätzliche Spalte coltab2 fallen, die nur als Bedingung diente, um eine weitere Spalte zu aktualisieren
val df_updated = df1.join(df2, df1("coly") === df2("coltab2"), "left_outer").withColumn("colx", when(!isnull($"coltab2"), "some value").otherwise(col("colx"))).drop(col("coltab2"))
Hoffe, dass ich völlig falsch bin und es ist ein effizienter Weg, es zu tun;)
es perfekte Lösung zu sein scheint. Es gibt zwei Verbesserungen, die getan werden müssen. 1 statt left_outer verbinden Sie einfach links verwenden können beitreten und 2 .otherwise (col („COLX“)), wird COLX gerade ist und in, wenn sie nicht verwendet werden können. –