gpt4 book ai didi

Scala 序号方法调用别名

转载 作者:行者123 更新时间:2023-12-02 08:30:00 24 4
gpt4 key购买 nike

在 Spark SQL 中,我们有 Row 对象,其中包含构成一行的记录列表(想想 Seq[Any])。 Row 具有序号访问器,例如 .getInt(0)getString(2)

说序号 0 = ID 和序号 1 = 名称。很难记住序数是什么,使代码困惑。

比如说我有下面的代码

def doStuff(row: Row) = {
//extract some items from the row into a tuple;
(row.getInt(0), row.getString(1)) //tuple of ID, Name
}

问题变成了如何为 Row 对象中的这些字段创建别名?

我想我可以创建采用隐式 Row 对象的方法;

def id(implicit row: Row) = row.getInt(0)
def name(implicit row: Row) = row.getString(1)

然后我可以将上面的重写为;

def doStuff(implicit row: Row) = {
//extract some items from the row into a tuple;
(id, name) //tuple of ID, Name
}

是否有更好/更简洁的方法?

最佳答案

您可以隐式地将这些访问器方法添加到行:

implicit class AppRow(r:Row) extends AnyVal {
def id:String = r.getInt(0)
def name:String = r.getString(1)
}

然后将其用作:

def doStuff(row: Row) = {
val value = (row.id, row.name)
}

关于Scala 序号方法调用别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28044321/

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