簡體   English   中英

激發如何在聯接中使用UDF

[英]Spark how to use a UDF with a Join

我想通過Spark使用特定的UDF

這是計划:

我有一個table A (一千萬行)和一個table B (一千五百萬行)

我想使用UDF比較table A一個元素和table B一個元素

這是我的代碼的示例。 在某些時候,我還需要說我的UDF比較必須大於0,9

DataFrame dfr = df
                .select("name", "firstname", "adress1", "city1","compare(adress1,adress2)")
                .join(dfa,df.col("adress1").equalTo(dfa.col("adress2"))
                        .and((df.col("city1").equalTo(dfa.col("city2"))
                                ...;

可能嗎 ?

是的你可以。 但是,由於Spark無法進行謂詞下推,因此它將比普通運算符要慢

例:

val udf = udf((x : String, y : String) => { here compute similarity; });
val df3 = df1.join(df2, udf(df1.field1, df2.field1) > 0.9)

例如:

val df1 = Seq (1, 2, 3, 4).toDF("x")
val df2 = Seq(1, 3, 7, 11).toDF("q")
val udf = org.apache.spark.sql.functions.udf((x : Int, q : Int) => { Math.abs(x - q); });
val df3 = df1.join(df2, udf(df1("x"), df2("q")) > 1)

您也可以直接從用戶定義函數返回布爾值

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM