你好, 程序员, 我希望你们都做得很好。

在我之前的文章《 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.