apache-spark - 如何在没有数据框的火花中执行列表达式
问题描述
Column
如果我只使用Literal
(没有数据框列),有什么方法可以评估我的表达式。
例如,类似:
val result: Int = someFunction(lit(3) * lit(5))
//result: Int = 15
或者
import org.apache.spark.sql.function.sha1
val result: String = someFunction(sha1(lit("5")))
//result: String = ac3478d69a3c81fa62e60f5c3696165a4e5e6ac4
我能够使用数据框进行评估
val result = Seq(1).toDF.select(sha1(lit("5"))).as[String].first
//result: String = ac3478d69a3c81fa62e60f5c3696165a4e5e6ac4
但是有没有办法在不使用数据框的情况下获得相同的结果?
解决方案
要评估文字列,您可以将其转换为Expression
andeval
而不提供input
行:
scala> sha1(lit("1").cast("binary")).expr.eval()
res1: Any = 356a192b7913b04c54574d18c28d46e6395428ab
只要函数是一个UserDefinedFunction
,它就会以同样的方式工作:
scala> val f = udf((x: Int) => x)
f: org.apache.spark.sql.expressions.UserDefinedFunction = UserDefinedFunction(<function1>,IntegerType,Some(List(IntegerType)))
scala> f(lit(3) * lit(5)).expr.eval()
res3: Any = 15
推荐阅读
- html - ::before 伪元素可以是链接吗?
- flutter - 调用模型的工厂构造函数的 Dart/Flutter 问题
- ios - 未找到模块“flutter_facebook_login”
- r - 在 semPaths 图中切换顺序
- python - 重复的张量名称在不应该的情况下起作用
- wordpress - WordPress 管理菜单:自定义注销链接显示为子菜单项而不是菜单项
- python - 当我尝试从函数中放置标签文本时遇到问题
- lisp - 检查 Common Lisp 中的正确列表
- nspersistentcloudkitcontainer - 带有 NSPersistentCloudKitContainer 的“NSAllocateMemoryPages() 失败”
- r - 线性回归预测:没有适用于“预测”的方法应用于“data.Frame”类的对象