如何将二维数组传递给用户定义的函数?

Posted

技术标签:

【中文标题】如何将二维数组传递给用户定义的函数?【英文标题】:How to pass two-dimensional array to User defined functions? 【发布时间】:2016-05-19 14:11:06 【问题描述】:

使用 UDF 意味着每个因子 c1c2c3 必须独立地通过参数传递。是否有任何灵活的解决方案,例如如何将这些因素的序列传递给UDF

val myFunction = udf 
      (userBias: Float, productBias: Float, productBiases: Map[Long, Float],
        userFactors: Seq[Float], productFactors: Seq[Float], c1: String, c2: String, c3: String) =>

        var result = Float.NaN

        // result calculation

        result
    

然后我用以下方式调用这个函数(datasetDataFrame):

myFunction(userBias("bias"), 
           productBias("bias"),
           productBias("biases"),
           userFactors("features"), 
           productFactors("features"),
           dataset(factors(0)), dataset(factors(1)), dataset(factors(2))

如果我这样做,编译器会说“不适用”:

val myFactors = dataset.select(factors.head, factors.tail: _*)

myFunction(userBias("bias"), 
           productBias("bias"),
           productBias("biases"),
           userFactors("features"), 
           productFactors("features"),
           myFactors)

【问题讨论】:

为什么这个问题被否决了? 【参考方案1】:

如果你有这样的二维数组:

val xy = Array.ofDim[Int](numrows, numcolumns);
isFunction(xy);

isFunction 的函数定义如下所示:

def isFunction(arg: Array[Array[Int]])
    println(arg(i)(0)); // how to access array element

【讨论】:

以上是关于如何将二维数组传递给用户定义的函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何将二维数组传递给函数[重复]

C语言函数传递二维数组

如何将 C# 中的二维数组传递给 C++ DLL?

JNI维数组:将二维数组从java传递给c

将二维数组指针传递给c ++中的函数[重复]

将二维数组传递给另一个类 C++