1
我正在嘗試編寫可以在Spark SQL中的Dataframes中工作的UDF。創建與DataFrame和SQL API兼容的UDF
下面是代碼
def Timeformat (timecol1: Int) = {
if (timecol1 >= 1440)
("%02d:%02d".format((timecol1-1440)/60, (timecol1-1440)%60))
else
("%02d:%02d".format((timecol1)/60, (timecol1)%60))
}
sqlContext.udf.register("Timeformat", Timeformat _)
這種方法完全適用的sqlcontext
val dataa = sqlContext.sql("""select Timeformat(abc.time_band) from abc""")
使用DF - 獲取錯誤 val fcstdataa = abc.select(Timeformat(abc("time_band_start")))
此方法拋出一個類型不匹配錯誤。
<console>:41: error: type mismatch;
found : org.apache.spark.sql.Column
required: Int
當我重新編寫UDF如下,對DF工作完美,但不工作在Sqlcontext。有什麼辦法來解決這個問題,而無需創建多個UDF的做同樣的事情
val Timeformat = udf((timecol1: Int) =>
if (timecol1 >= 1440)
("%02d:%02d".format((timecol1-1440)/60, (timecol1-1440)%60))
else
("%02d:%02d".format((timecol1)/60, (timecol1)%60))
)
我非常新的Scala和火花,這是什麼兩個聲明之間的區別。一種方法比其他方法更好嗎?
當然,檢查編輯。 – zero323
非常感謝。 – archerarjun