不支持的文字类型:class scala.runtime.BoxedUnit。

11
我正在尝试过滤从Oracle读取的数据框中的一列,如下所示。

我正在尝试过滤从Oracle读取的数据框中的一列,如下所示。

import org.apache.spark.sql.functions.{col, lit, when}

val df0  =  df_org.filter(col("fiscal_year").isNotNull())

我执行时收到以下错误:

java.lang.RuntimeException: Unsupported literal type class scala.runtime.BoxedUnit ()
at org.apache.spark.sql.catalyst.expressions.Literal$.apply(literals.scala:77)
at org.apache.spark.sql.catalyst.expressions.Literal$$anonfun$create$2.apply(literals.scala:163)
at org.apache.spark.sql.catalyst.expressions.Literal$$anonfun$create$2.apply(literals.scala:163)
at scala.util.Try.getOrElse(Try.scala:79)
at org.apache.spark.sql.catalyst.expressions.Literal$.create(literals.scala:162)
at org.apache.spark.sql.functions$.typedLit(functions.scala:113)
at org.apache.spark.sql.functions$.lit(functions.scala:96)
at org.apache.spark.sql.Column.apply(Column.scala:212)
at com.snp.processors.BenchmarkModelValsProcessor2.process(BenchmarkModelValsProcessor2.scala:80)
at com.snp.utils.Utils$$anonfun$getAllDefinedProcessors$1.apply(Utils.scala:30)
at com.snp.utils.Utils$$anonfun$getAllDefinedProcessors$1.apply(Utils.scala:30)
at com.sp.MigrationDriver$$anonfun$main$6$$anonfun$apply$2.apply(MigrationDriver.scala:140)
at com.sp.MigrationDriver$$anonfun$main$6$$anonfun$apply$2.apply(MigrationDriver.scala:140)
at scala.Option.map(Option.scala:146)
at com.sp.MigrationDriver$$anonfun$main$6.apply(MigrationDriver.scala:138)
at com.sp.MigrationDriver$$anonfun$main$6.apply(MigrationDriver.scala:135)
at scala.collection.TraversableLike$WithFilter$$anonfun$foreach$1.apply(TraversableLike.scala:733)
at scala.collection.Iterator$class.foreach(Iterator.scala:891)
at scala.collection.AbstractIterator.foreach(Iterator.scala:1334)
at scala.collection.MapLike$DefaultKeySet.foreach(MapLike.scala:174)
at scala.collection.TraversableLike$WithFilter.foreach(TraversableLike.scala:732)
at com.sp.MigrationDriver$.main(MigrationDriver.scala:135)
at com.sp.MigrationDriver.main(MigrationDriver.scala)

请问我在这里做错了什么,如何修复?


请在关于Spark版本和Spark Cassandra连接器的信息中添加更多细节... - Alex Ott
@AlexOtt 先生,以下是版本详细信息: scala - 2.11 spark - 2.3.1 cassandra - 3.11.1 - BdEngineer
你说的“尝试过滤数据框的一列”是什么意思?你能详细说明一下吗? - Ramesh Maharjan
@RameshMaharjan,列“fiscal_year”似乎有一些空值,因此无法加载到Cassandra中...因此从数据框中过滤掉这些记录。 - BdEngineer
1
请查看以下链接以了解如何在Spark DataFrame中过滤掉null值:https://dev59.com/oVkS5IYBdhLWcg3wiXMj。同时,您也可以查看我的答案:https://stackoverflow.com/questions/50478512/filter-null-value-in-dataframe-column-of-spark-scala。 - Ramesh Maharjan
显示剩余4条评论
2个回答

20

只需在函数上删除括号:

从:
val df0 = df_org.filter(col("fiscal_year").isNotNull())
到:
val df0 = df_org.filter(col("fiscal_year").isNotNull)


17

尝试在您的过滤器中删除 () 中的 isNull()


1
什么?OP的问题中没有isNull - Nino Filiu
2
他的意思是要去掉isNotNull上的括号,这才是正确答案。 - Mpizos Dimitris
2
这对我完全有效,但为什么?发生了什么事? - alexddupree

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接