【问题标题】:How can i learn the value of a parameter in a function如何学习函数中参数的值
【发布时间】:2019-03-05 18:15:08
【问题描述】:

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

【问题讨论】:

  • print type(userRatings) in filterDuplicates 打印什么? print type(joinedRatings) 打印什么?
  • @Tobias Brösamle ,类型(joinedRatings)是
  • type(userRatings) 怎么样?
  • @Tobias Brösamle (userRatings) 是 def 函数下的一个变量,我使用joinedRatings 来执行这个函数
  • 但显然 userRatings 与joinedRatings 的类型不同。这就是为什么我希望您打印 userRatings 的类型,所以您可以看到它不一样,并且“但它适用于 filterDuplicates 中的 userRatings”的论点是无效的。

标签: python apache-spark pyspark


【解决方案1】:

请告诉我如何了解“joinedRatings[1]”的价值?

使用first:

first()

返回此 RDD 中的第一个元素。

joinedRatings.first()

take__getitem__

take(num)

取RDD的前num个元素。

joinedRatings.take(1)[0]

【讨论】:

    【解决方案2】:

    根据上面的代码(不容易阅读),我猜 userRatings 是一个数组,而 joinedRatings 是一个 PipelinedRDD。似乎 PipelinedRDD 对象无法使用索引访问。例如[1]。这并不奇怪。对象可以支持通过索引访问它们,但它们必须故意实现该功能。绝大多数人不这样做,因为这通常对他们没有意义。

    Python 的一个方便的特性,尤其是对于那些刚接触它的人来说,是它内置的调试器。

    import pdb; pdb.set_trace()
    

    您可以将此行添加到您的源代码中并通过它进行调试。这将让您使用/检查joinedRatings 对象。有关详细信息,请参阅

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

    【讨论】:

    • pdb 在这种情况下不起作用 - How can PySpark be called in debug mode?userRatingsTuple[int, Tuple[int, float], Tuple[int, float]](我确信外部元组,内部元组是基于 repr 猜测的)和 filterDuplicates 只是将外部元组的索引与解包混合在一起。
    • 您的异常与joinedRatings 不是元组有关
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-19
    • 2021-05-16
    • 1970-01-01
    • 1970-01-01
    • 2013-07-05
    相关资源
    最近更新 更多