繁体   English   中英

Spark Scala - Spark Dataframe 列上的持续时间到分钟

[英]Spark Scala - Duration to Mins on Spark Dataframe column

我有一个 df 列,该列将持续时间表示为字符串,如PT2H 我想创建一个新的列 minutes_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

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

您可以使用用户定义的函数来执行此操作,但请注意这些未得到优化,因此您可能会从编写自己的仅 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")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM