Scalding DSL如何转换为常规Scala代码?

时间:2014-07-12 11:10:53

标签: scala dsl scalding

请帮助了解Scalding DSL如何转换为常规Scala代码。

https://github.com/twitter/scalding/wiki/Fields-based-API-Reference#sortBy

例如:

val fasterBirds = birds.map('speed -> 'doubledSpeed) { speed : Int => speed * 2 }

问题:

  1. 我需要遵循哪些约定来将自己的函数添加到Scalding map, reduce,groupBy, sort和`scanLeft?
  2. Scalding如何在像''inpFld - >这样的字段上翻译表达式'outFld到Scala代码?
  3. Scalding翻译器创建了哪些数据结构/功能?在Scalding源代码中哪里可以找到它们?
  4. 谢谢!

1 个答案:

答案 0 :(得分:4)

这是常规的Scala代码。 Scala的一个优势在于其可扩展性。该语法允许程序员扩展程序的语法以创建特定于域的语言。这在使用底层库时特别有用。

Scala的特定于域的语言并没有转化为允许您将代码的应用推迟到适当的时间。刻度字符(')表示以下字符集是符号,内置数据类型。 ->运算符是语法糖,可以用与逗号相同的方式表达,但在视觉上,它赋予“翻译”或“从此到此”的概念。

您正在查看的特定于域的语言不会创建结构,尽管它看起来确实会创建一个仿函数。在这种情况下,Java虚拟机将其视为Function1[Type,Type]实例,它具有apply方法,该方法接受其参数并返回由提供的代码计算的结果。