【问题标题】:PySpark: Working with 2 RDDs, element-wise comparisonPySpark:使用 2 个 RDD,逐元素比较
【发布时间】:2022-01-18 05:55:48
【问题描述】:

假设我有两个 RDDS 我想逐个比较:

data1 = [1,2,3]
rdd1 = spark.sparkContext.parallelize(data1)
data2 = [7,8,9]
rdd2 = spark.sparkContext.parallelize(data2)

将它们按元素相乘以得到以下数组的最佳方法是什么?

rdd3 = [[7,8,9], [14,16,18], [21,24,27]]

我感觉这是一个连接操作,但我不确定如何设置键值对。

【问题讨论】:

    标签: apache-spark join pyspark rdd distributed-computing


    【解决方案1】:

    试试笛卡尔,像这样:

    data1 = [1,2,3]
    rdd1 = spark.sparkContext.parallelize(data1)
    data2 = [[7,8,9]]
    rdd2 = spark.sparkContext.parallelize(data2)
    rdd1.cartesian(rdd2).map(lambda x: [x[0]*i for i in x[1]]).collect()
    

    【讨论】:

    • 这行不通,顺便说一句
    【解决方案2】:

    您可以找到rdd'scartesian 连接,然后减少它们以获得列表。

    注意:Spark 是一个分布式处理引擎,reduceByKey 可以以任意顺序返回最终列表。如果您想要强排序保证,请丰富您的 RDD 以包含索引元素。

    
    data1 = [1,2,3]
    rdd1 = spark.sparkContext.parallelize(data1)
    data2 = [7,8,9]
    rdd2 = spark.sparkContext.parallelize(data2)
    
    rdd1.cartesian(rdd2)\
        .map(lambda x: (x[0], [x[0] * x[1]]))\
        .reduceByKey(lambda x, y: x + y)\
        .map(lambda x: x[1]).collect()
    

    输出

    [[7, 8, 9], [14, 16, 18], [21, 24, 27]]
    

    【讨论】:

    • 这行得通!谢谢
    猜你喜欢
    • 1970-01-01
    • 2020-07-25
    • 2022-01-08
    • 1970-01-01
    • 2016-08-08
    • 2017-01-20
    • 2012-12-19
    • 2013-03-14
    • 2018-09-29
    相关资源
    最近更新 更多