gpt4 book ai didi

scala - 在 Spark 数据框中映射

转载 作者:行者123 更新时间:2023-12-02 09:15:49 26 4
gpt4 key购买 nike

使用 Spark 2.x,我正在使用数据帧。

val proposals = spark.read
.option("header", true)
.option("inferSchema", true)
.option("delimiter", ";")
.csv("/proposals.txt.gz")

proposals.printSchema()

工作正常并给出:

root
|-- MARKETCODE: string (nullable = true)
|-- REFDATE: string (nullable = true)
|-- UPDTIME: string (nullable = true)
|-- UPDTIMEMSEC: integer (nullable = true)
|-- ENDTIME: string (nullable = true)
|-- ENDTIMEMSEC: integer (nullable = true)
|-- BONDCODE: string (nullable = true)

现在我想以毫秒为单位计算时间,因此编写了一个函数:

def time2usecs( time:String, msec:Int )={
val Array(hour,minute,seconds) = time.split(":").map( _.toInt )
msec + seconds.toInt*1000 + minute.toInt*60*1000 + hour.toInt*60*60*1000
}
time2usecs( "08:13:44", 111 )


time2usecs: (time: String, msec: Int)Int
res90: Int = 29624111

拼图的最后平静是这样的:

proposals.withColumn( "utime",
proposals.select("UPDTIME","UPDTIMEMSEC")
.map( (t,tms) => time2usecs(t,tms) ))

但我不知道如何执行 df.select(column1, column2).map(...) 部分。

最佳答案

在 Spark 中对数据框列使用方法的常见方法是定义一个 UDF(用户定义的函数,请参阅 here 了解更多信息)。对于您的情况:

import org.apache.spark.sql.functions.udf
import spark.implicits._

val time2usecs = udf((time: String, msec: Int) => {
val Array(hour,minute,seconds) = time.split(":").map( _.toInt )
msec + seconds.toInt*1000 + minute.toInt*60*1000 + hour.toInt*60*60*1000
})

val df2 = df.withColumn("utime", time2usecs($"UPDTIME", $"UPDTIMEMSEC"))

spark.implicits._ 在此处导入,以允许对 col() 函数使用 $ 简写。

关于scala - 在 Spark 数据框中映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47253834/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com