【问题标题】:Pyspark: How to count the number of each equal distance interval in RDDPyspark:如何计算RDD中每个等距离间隔的数量
【发布时间】:2020-07-01 21:35:55
【问题描述】:

我有一个RDD[Double],我想把RDD分成k等间隔,然后统计RDD中每个等距离间隔的个数。

例如,RDD 类似于 [0,1,2,3,4,5,6,6,7,7,10]。我想把它分成10等间隔,所以间隔是[0,1), [1,2), [2,3), [3,4), [4,5), [5,6), [6,7), [7,8), [8,9), [9,10]

如您所见,RDD 的每个元素都将位于其中一个区间内。然后我想计算每个间隔的数量。这里,[0,1),[1,2),[2,3),[3,4),[4,5),[5,6) 中有一个元素,[6,7)[7,8) 都有两个元素。 [9,10] 有一个元素。

最后我希望有一个像array([1,1,1,1,1,1,2,2,0,1] 这样的数组。

【问题讨论】:

    标签: apache-spark pyspark


    【解决方案1】:

    试试这个。我假设范围的第一个元素是包容性的,最后一个是排斥性的。请对此进行确认。例如,当考虑范围 [0,1] 且元素为 0 时,条件为元素 >= 0 且元素

    for index_upper, element_upper in enumerate(array_range):
      counter = 0
      for index, element in enumerate(rdd.collect()):
        if element >= element_upper[0] and element < element_upper[1] :
          counter +=1
      countElementsWithinRange.append(counter)
    
    print(rdd.collect())
    # [0, 1, 2, 3, 4, 5, 6, 6, 7, 7, 10]
    print(countElementsWithinRange)
    # [1, 1, 1, 1, 1, 1, 2, 2, 0, 0]
    

    【讨论】:

    • 谢谢,我通过将map 函数应用于RDD 来解决问题,以获取间隔数,然后我使用reduceByKey 获取每个间隔的数量。
    • 嗨,伙计。我发现rdd.collect()会花很多时间,我想知道有什么方法不需要collectrdd。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-11
    • 1970-01-01
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多