如何定义数据框的排序顺序?

时间:2016-03-15 17:17:20

标签: scala sorting spark-dataframe

我想根据周数和星期几对数据帧进行排序。

周数变量是双倍的。

星期几是文本(星期一,星期二,星期三,星期四,星期五,星期六,星期日)。

这是我的数据框:

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。 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

1 个答案:

答案 0 :(得分:0)

  

我是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中执行它,因为您不需要将该函数包装在面向对象的{{1}中} class clothing。