Как узнать значение параметра в функции - PullRequest
0 голосов
/ 05 марта 2019

Я новичок в 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

чем у меня этот СДР

   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):» без каких-либо проблем, пожалуйста, дайте мне знать, как узнать значение «joinRatings [1]»?

Ответы [ 2 ]

1 голос
/ 05 марта 2019

пожалуйста, дайте мне знать, как узнать значение «joinRatings [1]»?

Используйте либо first:

first()

Вернуть первый элемент в этом СДР.

joinedRatings.first()

или take с __getitem__:

take(num)

Возьмите первые числа элементов СДР.

joinedRatings.take(1)[0]
0 голосов
/ 05 марта 2019

Исходя из приведенного выше кода (который нелегко читать), я предполагаю, что userRatings - это массив, в то время как joinRatings - это PipelinedRDD. Кажется, объекты PipelinedRDD не могут быть доступны с помощью индекса. например [1]. Это не так уж удивительно. Объекты могут поддерживать доступ к ним по индексу, но они должны сознательно реализовывать эту функцию. Подавляющее большинство этого не делает, поскольку для них это обычно не имеет смысла.

Удобной особенностью Python, особенно для новичков в нем, является его встроенный отладчик.

import pdb; pdb.set_trace()

Вы можете добавить эту строку в ваш исходный код и отлаживать его. Это позволит вам поиграть / изучить объект joinRatings. Для получения дополнительной информации см

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...