我是pyspark的新手,我的脚本如下;
joinedRatings=ratings.join(ratings)
joinedRatings.take(4)
,输出为;
[(196, ((242, 3.0), (242, 3.0))), (196, ((242, 3.0), (393, 4.0))), (196, ((242, 3.0), (381, 4.0))), (196, ((242, 3.0), (251, 3.0)))]
在那之后,我得到的功能是;
def filterDuplicates(userRatings):
ratings = userRatings[1]
(movie1, rating1) = ratings[0]
(movie2, rating2) = ratings[1]
return movie1 < movie2
比我有这个RDD
uniqueJoinedRatings = joinedRatings.filter(filterDuplicates)
我的问题是能够了解我编写的该函数的运行方式
joinedRatings[1]
我收到的错误是
Fail to execute line 1: joinedRatings[1]
Traceback (most recent call last):
File "/tmp/zeppelin_pyspark-240579357005199320.py", line 380, in <module>
exec(code, _zcUserQueryNameSpace)
File "<stdin>", line 1, in <module>
TypeError: 'PipelinedRDD' object does not support indexing
但是它正在“ def filterDuplicates(userRatings):”函数下运行,没有任何问题,请让我知道如何学习“ joinedRatings [1]”的值?
答案 0 :(得分:1)
请让我知道如何学习“ joinedRatings [1]”的值?
使用first
:
first()
返回此RDD中的第一个元素。
joinedRatings.first()
或take
与__getitem__
:
take(num)
采用RDD的前num个元素。
joinedRatings.take(1)[0]
答案 1 :(得分:0)
基于上面的代码(不容易阅读),我猜 userRatings 是一个数组,而 joinedRatings 是PipelinedRDD。似乎无法使用索引访问PipelinedRDD对象。例如[1]。这并不奇怪。对象可以支持按索引访问它们,但是它们必须故意实现该功能。绝大多数人没有这样做,因为通常这对他们来说没有意义。
Python的一个便捷功能是在调试器中构建。
import pdb; pdb.set_trace()
您可以将此行添加到源代码中并通过它进行调试。这样,您就可以使用/检查joinedRatings对象。有关更多信息,请参见