簡體   English   中英

如何在 Spark 中使用非 udf 方法?

[英]How to use non udf method in Spark?

我的代碼如下

myDF.map{ x =>

  val inp = MyUtils.doSomething(x.value) //accepts Int values and return Int
  MyInfo(inp)

}

這里 MyUtils.doSomething 在我的 spark MyUtils.doSomething代碼中是正常的 function (non UDF) 它工作正常

但是當我這樣做時

   val DF = myDF.withColumn("value", lit(MyUtils.doSomething(col("value").asInstanceOf[Int].toInt)))

為什么它顯示錯誤

class org.apache.spark.sql.Column cannot be cast to class java.lang.Integer

我怎樣才能解決這個問題? 有什么方法可以獲得col("value")的基礎值,以便我可以在我的doSomething function 中使用它。

不知道為什么col("value").asInstanceOf[Int].toInt它沒有給出 Int 值?

不知道為什么 col("value").asInstanceOf[Int].toInt 它沒有給出 Int 值?

好吧,因為您想如何轉換Column("colName", 21, false) asInstanceOf基本上會使編譯器忽略這樣一個事實,即Column類型的 object 是 integer,而您將在運行時面臨異常。 您應該以一種甚至不需要asInstanceOf的方式編寫代碼。 關於您的第一個考慮, UDF基本上是一個 function,由 spark 序列化為 spark 從站並在列上執行,因此您必須這樣做:

import org.apache.spark.sql.functions._
val doSomethingUdf = udf(MyUtils.doSomething)
// if doSomething is defined as a method "def doSomething ..."
// then it would be better to do
// udf(MyUtils.doSomething _)

暫無
暫無

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

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