根据行上下文pysp计算rdd中的行数

2024-10-01 09:39:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着了解RDD是如何工作的。例如,我想根据某个RDD对象中的上下文计算行数。我对数据帧和DF的代码有一些经验,比如有列AB和其他一些列,看起来像:

df = sqlContext.read.json("filepath")
df2 = df.groupBy(['A', 'B']).count()

这段代码的逻辑部分对我来说是清晰的-我对DF中的列名执行groupBy操作。在RDD中,我没有列名,只有类似的行,可以是元组或行对象。。。如何计算相似元组并将其作为整数添加到唯一行?例如,我的第一个代码是:

^{pr2}$

我执行映射操作,并从键AB创建一个值的元组。唯一行不再有任何键(这是DataFrame最重要的区别,它有列名)。 现在我可以生成这样的东西,但它只计算RDD中的行总数。在

rddcalc = rddob.distinct().count()

我想要的输出是:

((a1, b1), 2)
((a2, b2), 3)
((a2, b3), 1)
...

PS

我已经找到了我个人解决这个问题的办法。这里:rdd是初始的rdd,rddlist是所有行的列表,rddmod是最终修改的rdd,因此也是解决方案。在

rddlist = rdd.map(lambda line:(line.A, line.B)).map(lambda line: (line, 1)).countByKey().items()
rddmod = sc.parallelize(rddlist)

Tags: 对象lambda代码a2mapdfcountline
1条回答
网友
1楼 · 发布于 2024-10-01 09:39:52

我相信你要找的是reduceByKey。这将为您提供每对不同的(a,b)行出现的次数。 它看起来像这样:

rddob = df.rdd.map(lambda line: (line.A + line.B, 1))
counts_by_key = rddob.reduceByKey(lambda a,b: a+b)

现在,您将拥有以下形式的键和值对: ((a,b), count-of-times-pair-appears)

请注意,这只在A和B是字符串时才起作用。如果它们是列表,则必须创建一个“主键”类型的对象来执行reduce。不能执行主键是某个复杂对象的reduceByKey

相关问题 更多 >