Apache Beam + Kotlin = ❤️

Apache Beam 样例现已提供 Kotlin 版本!

Kotlin

如果您在职业生涯中一直使用 Java,那么您很可能也听说过 Kotlin,这是一种面向 JVM 的开源静态类型语言,由于其众多功能,使其比 Java 更简洁、更干净,同时又不牺牲性能或安全性。它主要受到 Android 开发者的青睐。

我们很高兴地宣布,我们也将在同一方向上迈出一步,与 Java 一同发布 Beam SDK 的 Kotlin 样例!

(注意:在撰写本文时,只有 WordCount 样例已添加到 Koltin,更多样例正在进行中)

代码片段

以下是一些简短的代码片段,展示了 Kotlin 样例与 Java 样例的比较

Java

 String filename = String.format(
                    "%s-%s-of-%s%s",
                    filenamePrefixForWindow(intervalWindow),
                    shardNumber,
                    numShards,
                    outputFileHints.suggestedFilenameSuffix);

Kotlin

 // String templating
 val filename = "$filenamePrefixForWindow(intervalWindow)-$shardNumber-of-$numShards${outputFileHints.suggestedFilenameSuffix)"

Java

public static class FormatAsTextFn extends SimpleFunction<KV<String, Long>, String> {
    @Override
    public String apply(KV<String, Long> input) {
        return input.getKey() + ": " + input.getValue();
    }
}

Kotlin

public class FormatAsTextFn : SimpleFunction<KV<String, Long>, String>() {
    override fun apply(input: KV<String, Long>) = "${input.key} : ${input.value}"  //Single line functions
}

Java

if(tableRow != null){
    formatAndInsert(tableRow);
}

Kotlin

tableRow?.let{
    formatAndInsert(it)  // No need for null checks
}

Java

String tableName = "testTable";

Kotlin

val tableName = "testTable"  // Type inferencing

欢迎贡献者!

虽然我们还在添加更多样例并简化当前样例,但我们希望得到您对代码片段的反馈。您可以在这里找到它们:https://github.com/apache/beam/tree/master/examples/kotlin

如果您已经使用 Kotlin 与 Apache Beam,我们非常感谢您能够帮助我们将现有的 Java 样例转换为 Koltin。

感谢您,我们期待您的反馈!