Tôi đang cố chuyển đổi một khung dữ liệu thông qua một hàm lấy mảng làm tham số. Mã của tôi trông giống như sau:Truyền mảng dưới dạng tham số UDF trong Spark SQL
def getCategory(categories:Array[String], input:String): String = {
categories(input.toInt)
}
val myArray = Array("a", "b", "c")
val myCategories =udf(getCategory _)
val df = sqlContext.parquetFile("myfile.parquet)
val df1 = df.withColumn("newCategory", myCategories(lit(myArray), col("myInput"))
Tuy nhiên, ánh sáng không thích mảng và lỗi tập lệnh này. Tôi cố gắng definining một chức năng áp dụng một phần mới và sau đó là udf sau đó:
val newFunc = getCategory(myArray, _:String)
val myCategories = udf(newFunc)
val df1 = df.withColumn("newCategory", myCategories(col("myInput")))
này không làm việc, hoặc khi tôi nhận được một ngoại lệ nullPointer và nó xuất hiện myArray không được công nhận. Bất kỳ ý tưởng về cách tôi vượt qua một mảng như một tham số cho một chức năng với một dataframe?
Trên một ghi chú riêng biệt, bất kỳ giải thích nào về lý do tại sao thực hiện điều gì đó đơn giản như sử dụng hàm trên khung dữ liệu quá phức tạp (xác định hàm, xác định lại dưới dạng UDF, v.v.)?