Bal*_*nan 1 scala user-defined-functions apache-spark
我有一个返回数据帧的UDF.像下面这样的东西
scala> predict_churn(Vectors.dense(2.0,1.0,0.0,3.0,4.0,4.0,0.0,4.0,5.0,2.0))
res3: org.apache.spark.sql.DataFrame = [noprob: string, yesprob: string, pred: string]
scala> predict_churn(Vectors.dense(2.0,1.0,0.0,3.0,4.0,4.0,0.0,4.0,5.0,2.0)).show
+------------------+------------------+----+
| noprob| yesprob|pred|
+------------------+------------------+----+
|0.3619977592578127|0.6380022407421874| 1.0|
+------------------+------------------+----+
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用该命令将其注册为UDF时
hiveContext.udf.register("predict_churn", outerpredict _)
Run Code Online (Sandbox Code Playgroud)
我得到一个错误
java.lang.UnsupportedOperationException: Schema for type org.apache.spark.sql.DataFrame is not supported
at org.apache.spark.sql.catalyst.ScalaReflection$class.schemaFor(ScalaReflection.scala:715)
Run Code Online (Sandbox Code Playgroud)
返回的数据帧不受支持.我使用Spark 1.6.1和Scala 2.10.如果不支持,请如何将多列返回到外部程序.
谢谢
巴拉
返回的数据帧不受支持
正确 - 您无法从UDF返回DataFrame.UDF应返回可转换为支持的列类型的类型:
在您的情况下,您可以使用案例类:
case class Record(noprob: Double, yesprob: Double, pred: Double)
Run Code Online (Sandbox Code Playgroud)
让你的UDF(predict_churn)返回Record.然后,当应用于单个记录(如UDF)时,此案例类将转换为名为其成员的列(以及正确的类型),从而生成类似于函数当前返回的DataFrame.
| 归档时间: |
|
| 查看次数: |
2052 次 |
| 最近记录: |