【问题标题】:Cartesian product of two RDD in SparkSpark中两个RDD的笛卡尔积
【发布时间】:2015-06-22 23:04:33
【问题描述】:

我对 Apache Spark 完全陌生,我正在尝试对两个 RDD 进行笛卡尔积。例如,我有 A 和 B 之类的:

A = {(a1,v1),(a2,v2),...}
B = {(b1,s1),(b2,s2),...}

我需要一个新的 RDD,例如:

C = {((a1,v1),(b1,s1)), ((a1,v1),(b2,s2)), ...}

知道我该怎么做吗?尽可能简单:)

提前致谢

PS:我终于按照@Amit Kumar 的建议这样做了:

cartesianProduct = A.cartesian(B)

【问题讨论】:

    标签: python apache-spark dot-product


    【解决方案1】:

    这不是点积,而是笛卡尔积。使用cartesian 方法:

    def cartesian[U](other: spark.api.java.JavaRDDLike[U, _]): JavaPairRDD[T, U]
    

    返回这个RDD和另一个RDD的笛卡尔积,即a在this,b在other的所有元素对(a, b)的RDD。

    Source

    【讨论】:

      【解决方案2】:

      你可以这样做:

      A = {(a1,v1),(a2,v2),...}
      B = {(b1,s1),(b2,s2),...}
      
      C = A.cartesian(B)
      

      如果你这样做:

      C.take(5)
      

      你可以看到这就是你想要的。

      【讨论】:

        【解决方案3】:

        如果您对如何处理多个列表感到好奇,这里有一个 pyspark 中的示例

        >>> a = [1,2,3]
        >>> b = [5,6,7,8]
        >>> c = [11,22,33,44,55]
        >>> import itertools
        >>> abcCartesianRDD = sc.parallelize(itertools.product(a,b,c))
        >>> abcCartesianRDD.count() #Test
            60
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-01-03
          • 2017-03-05
          • 1970-01-01
          • 2015-06-03
          • 2015-06-16
          • 2023-03-17
          • 1970-01-01
          相关资源
          最近更新 更多