我想根据周数和星期几对数据帧进行排序。
周数变量为双精度值。
星期几是一个文本(星期一,星期二,星期三,星期四,星期五,星期六,星期日)。
这是我的数据帧:
week_number | day_of_week | job_count | eff_rate
-----------------------------------------------------
1 | Fri | 30 | 70
1 | Mon | 50 | 80
1 | Sat | 340 | 20
1 | Sun | 1 | 8
1 | Thu | 3 | 40
1 | Tue | 4 | 10
1 | Wed | 50 | 70
2 | Fri | 120 | 180
2 | Mon | 12 | 80
2 | Sat | 11 | 9
2 | Sun | 80 | 11
2 | Tue | 60 | 14
2 | Thu | 4 | 23
2 | Wed | 1 | 50
我认为我需要定义一个函数,在其中定义排序应如何对变量的内容进行排序。 假设该函数称为手动排序。 manualsort() 会是什么样子,这样就可以这样使用?
df.sort(asc("week_number"), manualsort("day_of_week"))
结果将是这样的:
week_number | day_of_week | job_count | eff_rate
-----------------------------------------------------
1 | Mon | 50 | 80
1 | Tue | 4 | 10
1 | Wed | 50 | 70
1 | Thu | 3 | 40
1 | Fri | 120 | 180
1 | Sat | 340 | 20
1 | Sun | 1 | 8
我是 Scala 的新手,不知道如何编写函数
Scala函数遵循你描述的格式;但有时一个例子比模板有用得多。
def addThem( a:Int, b:Int ) : Int = {
var sum:Int = 0
sum = a + b
return sum
}
关键点:
- 函数括号中的项是传递给功能。
- 这些项目必须符合的类型是在变量名称,以冒号
:
作为分隔符。 - 作为参数传递的变量用逗号分隔。
- 如果函数具有声明的(而不是推断的)返回类型,则它是"函数签名的类型",因此它位于函数签名之后,使用相同的"冒号约束类型"模式(如
def getName() : String
) - 等号之后将代码块分配给函数定义。 代码块必须具有与函数签名兼容的退出类型(在这种情况下,代码块必须返回与
Int
兼容的内容) - 代码块中的变量定义具有相同的
name:Type
格式,但偶尔允许推断类型。
有了这些规则,我相信您将能够开始编写一些函数。 对于排序,您有效地提供了Java Comparator
的Scala版本,除了在Scala中有更多方法可以做到这一点,因为您不需要将函数包装在面向对象Comparator
类服装中。