scala – 不支持类型为Any的架构
发布时间:2020-12-16 09:24:39 所属栏目:安全 来源:网络整理
导读:我正在尝试创建一个spark UDF来从User定义的case类中提取(key,value)对的Map. scala函数似乎工作正常,但是当我尝试将它转换为spark2.0中的UDF时,我遇到了“Schema for type Any is not supported”错误. case class myType(c1: String,c2: Int)def getCaseCl
我正在尝试创建一个spark UDF来从User定义的case类中提取(key,value)对的Map.
scala函数似乎工作正常,但是当我尝试将它转换为spark2.0中的UDF时,我遇到了“Schema for type Any is not supported”错误. case class myType(c1: String,c2: Int) def getCaseClassParams(cc: Product): Map[String,Any] = { cc .getClass .getDeclaredFields // all field names .map(_.getName) .zip(cc.productIterator.to) // zipped with all values .toMap } 但是当我尝试将函数值实例化为UDF时,会导致以下错误 – val ccUDF = udf{(cc: Product,i: String) => getCaseClassParams(cc).get(i)} java.lang.UnsupportedOperationException: Schema for type Any is not supported at org.apache.spark.sql.catalyst.ScalaReflection$.schemaFor(ScalaReflection.scala:716) at org.apache.spark.sql.catalyst.ScalaReflection$.schemaFor(ScalaReflection.scala:668) at org.apache.spark.sql.catalyst.ScalaReflection$.schemaFor(ScalaReflection.scala:654) at org.apache.spark.sql.functions$.udf(functions.scala:2841) 解决方法
错误消息说明了一切.你在地图上有一个Any. Spark SQL和Dataset api不支持架构中的Any.它必须是受支持的类型之一(它是一个基本类型的列表,如String,Integer等一系列受支持的类型或支持的类型的映射).
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |