我如何学习函数中参数的值

时间:2019-03-05 09:59:19

标签: python apache-spark pyspark

我是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]”的值?

2 个答案:

答案 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对象。有关更多信息,请参见

https://docs.python.org/3/library/pdb.html