2017-06-01 2 views
1

Die Struktur einer Bienenstock-Tabelle (tbl_a) ist wie folgt:Do UDF (was eine weitere Funken Job benötigt wird) zu jedem Element der Array-Spalte in SparkSQL

name | ids 
A | [1,7,13,25168,992] 
B | [223, 594, 3322, 192928] 
C | null 
... 

Ein weiterer Bienenstock Tabelle (tbl_b) haben die entsprechenden Zuordnung zwischen ID zu new_id. Diese Tabelle ist groß, so kann nicht in dem Speicher

id | new_id 
1 | 'aiks' 
2 | 'ficnw' 
... 

Ich beabsichtige, eine neue Stock-Tabelle zu erstellen geladen werden, um die gleiche Struktur wie tbl_a, haben, aber das Array von id auf das Array von new_id konvertieren:

name | ids 
A | ['aiks','fsijo','fsdix','sssxs','wie'] 
B | ['cx', 'dds', 'dfsexx', 'zz'] 
C | null 
... 

Könnte mir jemand eine Idee geben, wie dieses Szenario in Spark SQL oder in Spark DataFrame implementiert wird? Vielen Dank!

Antwort

2

Dies ist eine teure Operation, aber Sie können es eine coalesce machen mit, explodieren und eine linke äußere Verknüpfung wie folgt:

tbl_a 
    .withColumn("ids", coalesce($"ids", array(lit(null).cast("int")))) 
    .select($"name", explode($"ids").alias("id")) 
    .join(tbl_b, Seq("id"), "leftouter") 
    .groupBy("name").agg(collect_list($"new_id").alias("ids")) 
    .show 
Verwandte Themen