从每个标签的RDD中获取X个值

时间:2016-07-15 16:26:32

标签: python apache-spark rdd

我的RDD看起来像这样:

[Row(label=1,data='asd'),
Row(label=2,data='asd'),
Row(label=1,data='asd'),
Row(label=3,data='asd'),
Row(label=4,data='asd'),
Row(label=3,data='asd'),
 ....
]

我对每个标签的样本数量不是很均匀,我希望将每个标签的固定数量放入RDD中。那可能吗?

如果每个都是一个列表,它在python中会是这样的:

agg = []
number_from_each = 5
for label in data:
    [agg.append(x) for x in data[label][:number_from_each]]

由于

1 个答案:

答案 0 :(得分:0)

您有多少种不同的标签?你知道他们所有人吗? 你想要的确是5(并冒着考虑我认为很长的整个列表的风险吗?

  • 我认为您的Row列表名为data
  • 我假设您的Row个对象可以通过Row.label
  • 来调用标签
  • 我假设您有一个已知标签列表labels

一个想法是使用字典来记录你已经拥有的东西。

labels = [1, 2, 3, 4]
agg = []
dic = {}
for l in labels:  # Initialize the dictionary
    dic[l] = 0 
for row in data:
    if dic[row.label] < 5:
        dic[row.label] += 1
        agg.append(row)