Pyspark元组对象没有属性spli

2024-06-30 07:30:14 发布

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

我正在为Pypark任务而挣扎。我需要得到每个频道的所有观看人数的总和。我有两套文件:1套显示节目和每个节目的浏览量,另一套显示节目以及它们在哪个频道上播放(可以是多个)。在

我对这两个文件执行了一个连接操作,结果看起来像。。在

[(u'Surreal_News', (u'BAT', u'11')),
 (u'Hourly_Sports', (u'CNO', u'79')),
 (u'Hourly_Sports', (u'CNO', u'3')),

我现在需要提取频道作为键,然后我想做一个reduceByKey来获得频道的视图总数。在

我编写了这个函数来提取chan as key和视图,然后可以使用reduceByKey函数来计算结果。但是,当我试图用collect()显示下面函数的结果时,我得到了一个“AttributeError:'tuple'object has no attribute'split'”错误

^{pr2}$

Tags: 文件函数视图频道节目newshourly人数
2条回答

我并没有完全解析您的代码,但当我对两个数据集应用连接转换时,我遇到了相同的错误。在

假设A和B是两个rdd。在

c = A.join(B)

我们可能认为c也是Rdd,错了。它是一个元组对象,我们不能执行任何拆分(“,”)类型的操作行动。一需要把c变成Rdd然后继续。在

如果我们想访问元组,假设D是元组。在

^{pr2}$

既然这是一项作业,我就试着解释到底发生了什么,而不仅仅是做答案。希望这会更有帮助!

这实际上与pySpark无关;它只是一个普通的Python问题。就像这个错误所说的,当split是一个字符串操作时,您正在尝试分割一个元组。而是通过索引访问它们。你要传递的对象:

[(u'Surreal_News', (u'BAT', u'11')),
 (u'Hourly_Sports', (u'CNO', u'79')),
 (u'Hourly_Sports', (u'CNO', u'3')),

是元组的列表,其中第一个索引是unicode字符串,第二个索引是另一个元组。您可以像这样将它们分开(我将用注释对每个步骤进行注释):

^{pr2}$

请注意,在任何地方都不用逗号分隔。还要注意,u'11'是一个字符串,而不是数据中的整数。只要您确定它没有错误,就可以用int(u'11')来转换它。或者,如果您更喜欢指定索引而不是解压缩,则可以执行相同的操作:

first_index, second_index = item

相当于:

first_index = item[0]
second_index = item[1]

还请注意,如果您不确定数据将采用何种形式,也就是说,如果有时对象中有两个项,而其他项中有三个项,则这会变得更加复杂。在这种情况下,对一个循环以一种通用的方式进行解包和索引需要更多的思考。在

相关问题 更多 >