請幫助我瞭解,我們傳遞給groupByKey參數時,它是在一個數據集groupByKey Spark中數據集
用在上面的代碼,請幫助我瞭解(L => -1)是指在groupByKey (L => 1)。
請幫助我瞭解,我們傳遞給groupByKey參數時,它是在一個數據集groupByKey Spark中數據集
用在上面的代碼,請幫助我瞭解(L => -1)是指在groupByKey (L => 1)。
l => l表示使用整個字符串(在你的情況下,當你在空間上進行標記時,每個單詞都將被用作關鍵字)。通過這種方式,您可以在同一分區中獲得每個單詞的所有出現次數,並可以對它們進行計數 - 正如您在其他文章中可能看到的那樣,在這種情況下最好使用reduceByKey,因此在計數之前不需要爲內存中的每個鍵收集所有值。
總是一個良好的開端是API文檔: http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.sql.Dataset
DEF groupByKey [K](FUNC:(T)⇒K)(隱式爲arg0:編碼器[K]):KeyValueGroupedDataset [ K,T] (Scala特有的)返回一個KeyValueGroupedDataset,其中數據按給定的鍵func分組。
您需要一個從數據集的數據派生您的密鑰的函數。
在您的示例中,您的函數將原樣使用整個字符串並將其用作關鍵字。一個不同的例子將是,對於一個數據集[字符串],以作爲密鑰使用的字符串的前3個字符,而不是整個字符串:
scala> val ds = List("abcdef", "abcd", "cdef", "mnop").toDS
ds: org.apache.spark.sql.Dataset[String] = [value: string]
scala> ds.show
+------+
| value|
+------+
|abcdef|
| abcd|
| cdef|
| mnop|
+------+
scala> ds.groupByKey(l => l.substring(0,3)).keys.show
+-----+
|value|
+-----+
| cde|
| mno|
| abc|
+-----+
組的鍵「ABC」將有2個值。
這裏是關鍵如何被轉化VS的(L => 1),所以你可以看到更好的區別:
scala> ds.groupByKey(l => l.substring(0,3)).count.show
+-----+--------+
|value|count(1)|
+-----+--------+
| cde| 1|
| mno| 1|
| abc| 2|
+-----+--------+
scala> ds.groupByKey(l => l).count.show
+------+--------+
| value|count(1)|
+------+--------+
| abcd| 1|
| cdef| 1|
|abcdef| 1|
| mnop| 1|
+------+--------+