【问题标题】:pySpark forEach function on a keypySpark forEach 键上的函数
【发布时间】:2015-06-25 10:23:29
【问题描述】:

我似乎在 forEach 上找不到太多文档。我有一个键/值配对的数据集。我正在寻找类似(伪代码)的东西:

对于每个键,对值求和 forEach 键,最大值 等等。

【问题讨论】:

    标签: python apache-spark pyspark


    【解决方案1】:

    This can be done e.g. with reduceByKey

    rdd = sc.parallelize([("foo", 1), ("foo", 2), ("bar", 3)])
    
    rdd.reduceByKey(lambda x, y : x + y).collect() # Sum for each key
    # Gives [('foo', 3), ('bar', 3)]  
    
    x.reduceByKey(max).collect() # Max for each key
    # Gives [('foo', 2), ('bar', 3)]
    

    【讨论】:

    • 对这些功能使用 reduceByKeyLocally 有意义吗?
    • 所以我对 max 和 min 进行了 reduceByKeyLocally,它只加快了一小部分速度,并且不再需要 .collect()
    【解决方案2】:

    请看Spark Programming Guide

    foreach(func) 对数据集的每个元素运行一个函数 func。这 通常用于副作用,例如更新累加器 变量(见下文)或与外部存储系统交互。

    请注意突出显示的“副作用”。 foreach 是 RDD 上的一个动作,它对 RDD 中的每个元素执行功能,但不向驱动程序返回任何内容。您可以将函数传递给它,例如 println 或增加累加器变量或保存到外部存储。

    在您的用例中,您应该使用 reduceByKey

    【讨论】:

    • 谢谢,这个解释很有帮助。
    猜你喜欢
    • 1970-01-01
    • 2018-07-04
    • 1970-01-01
    • 1970-01-01
    • 2022-07-08
    • 2020-06-10
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    相关资源
    最近更新 更多