Apache Beam + Kotlin = ❤️

Apache Beam 範例現在可以使用 Kotlin 了!

Kotlin

如果您是在專業領域中使用 Java 的人,很有可能您也聽說過 Kotlin,這是一種針對 JVM 的開源、靜態類型語言,由於其眾多功能,它主要受到 Android 開發人員的青睞,這些功能可實現比 Java 更簡潔、更清晰的程式碼,而不會犧牲效能或安全性。

我們非常高興地宣布,我們也朝著相同的方向邁出了一步,並同時發布了 Beam SDK 的 Kotlin 和 Java 範例!

(注意:在撰寫本文時,僅在 Koltin 中添加了 WordCount 範例,更多範例正在進行中)

程式碼片段

以下是一些簡短的程式碼片段,顯示 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。

感謝您,我們期待收到您的回饋!