【问题标题】:cross combine two RDDs using pyspark使用 pyspark 交叉组合两个 RDD
【发布时间】:2015-06-25 22:54:16
【问题描述】:

如何交叉组合(这是描述的正确方式吗?)这两个 RDDS?

输入:

rdd1 = [a, b]
rdd2 = [c, d]

输出:

rdd3 = [(a, c), (a, d), (b, c), (b, d)]

我试过rdd3 = rdd1.flatMap(lambda x: rdd2.map(lambda y: (x, y)),它抱怨It appears that you are attempting to broadcast an RDD or reference an RDD from an action or transformation.。我想这意味着你不能像列表理解那样嵌套action,一个语句只能做一个action

【问题讨论】:

    标签: lambda apache-spark rdd pyspark


    【解决方案1】:

    所以你已经注意到你不能在另一个transformation 中执行transformation(注意flatMapmaptransformations 而不是actions,因为它们返回RDD)。值得庆幸的是,Spark API 中的另一个转换直接支持您尝试完成的工作 - 即cartesian(请参阅http://spark.apache.org/docs/latest/api/python/pyspark.html#pyspark.RDD)。

    所以你会想要rdd1.cartesian(rdd2)

    【讨论】:

      【解决方案2】:

      您可以使用笛卡尔变换。 Here's 文档中的示例:

      >>> rdd = sc.parallelize([1,2])
      >>> sorted(rdd.cartesian(rdd).collect())
      [(1, 1), (1, 2), (2, 1), (2, 2)]
      

      在你的情况下,你会做 rdd3 = rdd1.cartesian(rdd2)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-21
        相关资源
        最近更新 更多