Spark中Column值算术运算报错,求60-minute(col("transactionTime"))实现方法
解决Spark Column类型的减法运算问题
嘿,这个场景我之前开发Spark应用时也踩过坑!你遇到的问题核心在于Spark的Column API是基于表达式的,不能直接用普通的数值(比如你写的60)和Column对象做运算——毕竟60是个Scala/Java的Int字面量,而minute(col("transactionTime"))返回的是Spark的Column类型,两者类型不匹配,自然会报错。
正确的做法是用Spark提供的lit()函数,把常量转换成Column类型,这样就能和其他Column表达式进行算术运算了。修改后的代码应该是这样:
transactionRDD.select( when( col("transactionId") === col("uuid"), lit(60) - minute(col("transactionTime")) ) )
简单解释下:
lit(60)会把整数60包装成一个Column表达式,这样它就和minute(...)返回的Column类型一致了- 之后就可以正常用减法运算符
-来做Column之间的运算,Spark会把这个逻辑转换成对应的SQL表达式执行
另外,这个方法也适用于其他算术运算(加、乘、除),比如你要做加法的话,就写lit(10) + col("num"),完全通用。
内容的提问来源于stack exchange,提问作者syv
相关产品推荐
相关产品推荐

