-1

Bunu nasıl yapacağımı biraz kaybettim. MADlib toplam fonksiyonunu uyguluyorum. Bu işlev diziler, rastgele sayıda alır ve ekler:toplam MADlib UDF Spark SQL

sum (array [ 1,2] , array [2,3 ] , array [4,5 ]) 
Return : [7,10] 

aynı sonuç döndürmek sonraki deyimi bir işlevi oluşturmak istiyor, ama böyle bir şey uygulamak için değil nasıl:

def sum[T](args: WrappedArray[T]*)(implicit n: Numeric[T]) = { 
    var i : Int = 0; 
    for(arg <- args){ 
     // Code 
     i = i + 1; 
    } 
    } 

sqlContext.udf.register("sum", sum(_:WrappedArray[Int]*)) 
sqlContext.sql("SELECT sum(collect_list(a),collect_list(b),collect_list(c)) from df").show 
+0

Bu soru çözüldü mü? – slouc

cevap

1
def sum[T](args: WrappedArray[T]*)(implicit n: Numeric[T]) = { 
    args.transpose.map(_.sum) 
} 

sum(Array(1, 2), Array(2, 3), Array(4, 5)) // ArrayBuffer(7, 10) 
+0

Ancak Spark SQL işlevinde birkaç argüman için bir kayıt olarak? Çünkü deyim beni 'sqlContext.udf.register '(" sum ", sum (_: WrappedArray [Int] *))' – nest

+0

anlamıyorum, üzgünüm. Açıkladığınız mantığı başarmak için sadece // kodun bir parçasına ihtiyacın olduğunu düşündüm. Sağladığım işlev, rasgele bir dizi WrappedArray [T] argümanını alır ve bunları açıkladığınız şekilde toplar (eşit uzunlukta olması gerektiğini unutmayın). – slouc

+0

Üzgünüm, iyi açıklamamış olsaydım. Fonksiyonu bana hizmet ediyor, ancak SparkSQL'e kaydedemediğim için sql – nest