Apache spark 在需要Scala非SQL类型的函数(来自函数对象)中,如何使用值(作为列)?

Apache spark 在需要Scala非SQL类型的函数(来自函数对象)中,如何使用值(作为列)?,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,我想了解如何动态地将天数添加到给定的时间戳中:我尝试了类似于下面所示示例的方法。这里的问题是,第二个参数的类型应该是Int,但是在我的例子中,它返回类型Column。如何取消装箱/获取实际值?(下面的代码示例可能不是100%正确,因为我是从头开始写的……我目前没有实际的代码) 我试过选演员: myDataset.withColumn("finalDate",date_add(col("date"),col("no_of_days").cast(IntegerType))) 但这也无济于事。那么

我想了解如何动态地将天数添加到给定的时间戳中:我尝试了类似于下面所示示例的方法。这里的问题是,第二个参数的类型应该是
Int
,但是在我的例子中,它返回类型
Column
。如何取消装箱/获取实际值?(下面的代码示例可能不是100%正确,因为我是从头开始写的……我目前没有实际的代码)

我试过选演员:

myDataset.withColumn("finalDate",date_add(col("date"),col("no_of_days").cast(IntegerType)))
但这也无济于事。那么,如何解决这个问题呢

我确实通过使用
selectExpr
找到了解决方法:

myDataset.selectExpr("date_add(date,no_of_days) as finalDate")
虽然这样做有效,但我仍然想了解如何使用
with column
with column(“finalDate”,expr(“date\u add(date,no\u of_days)”)获得相同的结果。


上面的语法应该可以使用。

我认为这是不可能的,因为您必须使用两个外观相似的独立类型系统—Scala和Spark SQL

使用selectExpr称之为解决方法可能是唯一的方法,因为您被限制在单一类型的系统中,在Spark SQL中,并且由于参数都是在Spark SQL的“领域”中定义的,所以这是唯一可能的方法

myDataset.selectExpr("date_add(date,no_of_days) as finalDate")

顺便说一句,您刚刚向我展示了对SQL的支持与Dataset的查询DSL不同的另一个原因。它是关于函数参数的来源——仅来自结构化数据源,仅来自Scala或其混合源(如UDF和UDAFs)。谢谢

谢谢你的回复!那么除了沿着SQL表达式的路线走,没有其他的方法了<如果我理解正确,code>expr与
selectExpr
非常相似。虽然看到它以这种方式工作很好,但我真的很想知道是否还有其他选择。(我知道我在这里有点挑剔…)
myDataset.selectExpr("date_add(date,no_of_days) as finalDate")