你好, 程序員, 我希望你們都做得很好。

在我之前的文章《 apache spark 的核心 api 簡介》 (第一部分)中, 我提到了純 rdd 的方法, 正如我承諾的那樣, 將解釋與多個示例片段配對 rdd 的功能或方法。所以就在這里!

要創建對 rdd, 請參考我以前的帖子。在該教程的幫助下, 您可以創建對 rdd (在這里, 我假設訂單 pairrdd 是我的對 rdd, 它有一個標記 order_id 的鍵和一個值設置為) order

  • 配對 rdd 核心 api

    • 訂單 pairrdd. join (其他 rdd)

      • 此方法返回一個 rdd, 其中包含具有中匹配鍵的所有元素對 otherRDD 。默認聯接的工作方式與 sql 中的內部聯接相同。

      ordersPairRdd.first()
      # (u'1', u'1,2013-07-25 00:00:00.0,11599,CLOSED')
      orderItemsPairRDD.first()
      # (u'1', u'1,1,957,1,299.98,299.98')
      ordersJoinOrderItems = ordersPairRdd.join(orderItemsPairRDD)
      # (u'1', (u'1,2013-07-25 00:00:00.0,11599,CLOSED', u'1,1,957,1,299.98,299.98'))

    • 訂單 pairrdd. 玩耍 (therrdd)

      • 此方法在和上執行左外部 ordersPairRdd 聯接 otherRDD

      • 假設 ordersPairRdd 有 (k, v) 和 otherRDD (k, w), 那么如果沒有元素中 otherRDD 的鍵叫 k, 則生成的 rdd 將具有 (k, (v, w)) 和 (k, (v, no))。

      ordersLeftJoinOrderItems = ordersPairRdd.leftOuterJoin(orderItemsPairRDD)
      ordersLeftJoinOrderItems.first()
      # (u'35236', (u'35236,2014-02-27 00:00:00.0,3987,PENDING', u'87999,35236,365,1,59.99,59.99'))

    • 訂單 pairrdd. rightouterjoin (其他 rdd)

      • 此方法在和上執行正確的外部聯接. ordersPairRdd otherRDD

      • 假設 ordersPairRdd 有 (k, v) 和 otherRDD (k, w), 那么如果沒有元素中 ordersPairRdd 的鍵叫 k, 則生成的 rdd 將具有 (k, (v, w)) 和 (k, (無, v))。

      ordersRightJoinOrderItems = ordersPairRdd.rightOuterJoin(orderItemsPairRDD)
      ordersRightJoinOrderItems.first()
      # (u'35236', (u'35236,2014-02-27 00:00:00.0,3987,PENDING', u'87999,35236,365,1,59.99,59.99'))

    • 命令 pairrdd. full outerjoin (其他 rdd)

      • 此方法在和執行完整的外部聯接. ordersPairRdd otherRDD

      • 假設 ordersPairRdd 有 (k, v otherRDD ) 和 (k, w) 和 (k, w), 那么生成的 rdd 將有 (k, (v, w)) 和 (k, (v, 無)) otherRDD , 如果沒有元素在有鍵 k 和 (k, (無, v)), 如果沒有元素 inordersPairRdd 在有一個鍵稱為 k。

      ordersFullJoinOrderItems = ordersPairRdd.fullOuterJoin(orderItemsPairRDD)
      ordersFullJoinOrderItems.first()
      # (u'35236', (u'35236,2014-02-27 00:00:00.0,3987,PENDING', u'87999,35236,365,1,59.99,59.99'))

    • 訂單 pairrdd. 縣 bykey ()

      • 此方法用于計算每個鍵的元素數, 然后將結果作為字典返回到主

平行化 ([(“a”, 1)、(“b”、1)、(“a”, 1)) rdd. 縣 bykey (). 項目 () # [(‘ a ‘, 2)、(‘ b ‘, 1)]

  • 命令 pairrdd. group bykey ()

    • 此方法將 rdd 中每個鍵的值分組為一個鍵。

    • 在每個密鑰上的聚合情況下, 使用 reduceByKey aggregateByKey 將提供比 groupByKey .

    ordersPairRdd.groupByKey().mapValues(list).collect()
    #[(u'18065', [u'18065,2013-11-13 00:00:00.0,5684,PROCESSING']), (u'34148', [u'34148,2014-02-20 00:00:00.0,10198,COMPLETE'])]

  • 訂單 pair-rdd. 減少 bykey (func)

    • 此方法將在關聯減少函數的幫助下合并每個鍵的值。

    pairRdd = sc.parallelize([("a", 1), ("b", 1), ("a", 1)])
    test = pairRdd.reduceByKey(lambda x, y: x+y)
    test.collect()
    # [('a', 2), ('b', 1)]

  • 訂單 pairrdd. 聚合 bykey (零值, seqfunc, combfunc)

    • 根據spark 編程指南, 此函數使用給定的組合函數和中性的 “零值” 聚合每個鍵的值。此函數可以返回不同的結果類型, u, 然后返回此 rdd 中的值的類型, v。因此, 我們需要一個將 v 合并到您中的操作和一個合并兩個 us 的操作。前一個操作用于合并分區中的值, 后一個操作用于在分區之間合并值。為了避免內存分配, 允許這兩個函數修改并返回它們的第一個參數, 而不是創建一個新的 u。

    pairRdd = sc.parallelize([("a", 1), ("b", 1), ("a", 1)])
    pairRdd.aggregateByKey((0),lambda x,y: (x+y),lambda r1,r2: (r1+r2)).collect()
    # [('a', 2), ('b', 1)]

  • 訂單接收 rd. 組合 bykey (createcombiner, mergevalue, mergecombiner)

    • 此方法用于使用聚合函數的自定義集組合每個鍵的值。

    • 例如, 如果 rdd 的類型 (k, v), 則此函數可能返回類型 (k, w) 的 rdd, 其中 v 和 w 可以是不同的類型。

      • createCombiner -它把一個 v 變成了 w

      • mergeValue -將 v 合并為 w。

      • mergeCombiner -把兩個 w 合二為一

      x = sc.parallelize([("a", 1), ("b", 1), ("a", 1)])
      def add(a, b):
      return a + str(b)
      
      sorted(x.combineByKey(str, add, add).collect())
      # [('a', '11'), ('b', '1')]

  • 命令 pair-rd. sortbykey (升序 = truthy)

    • 顧名思義, 此函數用于基于鍵對對 rdd 進行排序。

    tmp = [('a', 1), ('b', 2), ('1', 3), ('d', 4), ('2', 5)]
    sc.parallelize(tmp).sortByKey().first()
    # ('1', 3)
    
    tmp2 = [('Mary', 1), ('had', 2), ('a', 3), ('little', 4), ('lamb', 5)]
    tmp2.extend([('whose', 6), ('fleece', 7), ('was', 8), ('white', 9)])
    sc.parallelize(tmp2).sortByKey(True, 3, keyfunc=lambda k: k.lower()).collect()
    # [('a', 3), ('fleece', 7), ('had', 2), ('lamb', 5),...('white', 9), ('whose', 6)]

  • 這些都是對 rdd 的函數或方法, 即使用鍵: 值對。在我的下一篇文章中, 我將解釋與多個示例片段配對 rdd 的功能或方法

    Comments are closed.