spark scala—sparkDataframe列上持续到分钟的时间

e4eetjau  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(357)

我有一个df,它有一个类似字符串的列,表示持续时间 PT2H . 我想创建一个新的列minutes\u int,可以在scala中使用-

import java.time.Duration
Duration.parse('PT2H').toMinutes()

我怎样才能在整个专栏上做到这一点?我犯了错误-

jsonDF.withColumn("minutes_int", Duration.parse(col("duration_str")).toMinutes())

错误-

error: type mismatch;
 found   : org.apache.spark.sql.Column
 required: CharSequence

我怎样才能解决这个问题?

inkz8wg9

inkz8wg91#

您可以使用用户定义的函数来实现这一点,但请注意,这些函数并没有得到优化,因此您可以从编写自己的仅spark版本中获益。

import java.time.Duration
import org.apache.spark.sql.functions.udf
def durationToMinutes(duration:String) = Duration.parse(duration).toMinutes()
val durationToMinutesUDF = udf(durationToMinutes _)

然后使用它。。。

jsonDF.withColumn("minutes_int", durationToMinutesUDF(col("duration_str")))

注意,您还可以注册它,以便在sql中使用它,即。

spark.udf.register("duration_to_minutes",durationToMinutesUDF)
jsonDF.registerTempTable("json_df")
spark.sql("select duration_to_minutes(duration_str) from json_df")

相关问题