【问题标题】:Generate one rows from many rows into an RDD从多行生成一行到 RDD
【发布时间】:2016-11-30 16:43:24
【问题描述】:

我需要将 rdd 转换为两行,而不是 rdd 转换为一行。示例:

rdd1=a
     b

我需要:

rdd2=(a,b)

如何在 pyspark 中执行此步骤? 这个问题可能很愚蠢,但我是新来的。 “更新” 这是在 rdd2 和 rdd3 之间执行笛卡尔运算,从 rdd1 开始。喜欢:

rdd3:(k,l)
     (c,g)
     (f,x)

我想要这个输出:

rddOut:[(a,b),(k,l)]
       [(a,b),(c,g)]
       [(a,b),(f,x)]

提前致谢

【问题讨论】:

    标签: python apache-spark pyspark rows rdd


    【解决方案1】:

    更新我的答案:

    initRDD = sc.parallelize(list('aeiou')).map(lambda x: (x, ord(x))).collect()
    
    ssc = StreamingContext(sc, batchDuration=3)
    
    lines = ssc.socketTextStream('localhost', 9999)
    items = lines.flatMap(lambda x: x.split())
    counts = items.countByValue().map(lambda x: ([x] + initRDD))
    

    它看起来像广播而不是笛卡尔。

    【讨论】:

      【解决方案2】:

      您能详细解释一下您的需求吗?拥有单行的 RDD 并不是一个好主意,因为您会失去所有并行性。

      如果你想通过key来收集数据,你可以将RDD转换成pairs(key和value)的RDD。然后,您可以执行 reduceByKey 以便通过将 reduce 函数作为列表连接来通过键将所有内容收集到列表中。

      【讨论】:

      • 问题是我必须对两个相同的 rdds 执行测量距离(在两者之间执行笛卡尔),但结果太大了,因为我正在使用大规模数据集。所以想法是取 rdd1 的第一行,对所有 rdd2(与 rdd1 相同)执行笛卡尔运算,然后发出一个输出文件。去掉rdd1的第一行,取新的第一行,用rdd2进行笛卡尔运算,生成第二个文件等
      【解决方案3】:

      如果我对您的问题的理解是正确的,那么使用 flatMap 将为您提供所需的输出。

      【讨论】:

        猜你喜欢
        • 2019-06-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-25
        • 1970-01-01
        • 1970-01-01
        • 2017-09-29
        • 1970-01-01
        相关资源
        最近更新 更多