Apache Spark: проблема с картой [duplicate]

Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException вообще.

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

0
задан Anand S Kumar 2 September 2015 в 02:07
поделиться

2 ответа

Предполагая, что отступ в вашей реальной программе правильный, и что это Python 3.x (поскольку вы, похоже, используете печать как функцию), проблема будет в вашем заявлении лямбда. Очень маленький пример, чтобы показать вашу проблему -

>>> a = lambda (x,y) : x+y
  File "<stdin>", line 1
    a = lambda (x,y) : x+y
               ^
SyntaxError: invalid syntax

В Python 3.x, tuples не может быть частью синтаксиса параметра lambda, то есть вы не можете напрямую распаковать элемент в несколько аргументов (как может быть сделано в Python 2.x). Вместо этого вам нужно будет использовать одну переменную, а затем получить доступ к каждому элементу кортежа, используя индекс. Пример -

print("The Overall Winner is,", sorted(data, key=lambda x: sum(n[1] for n in x[1]), reverse=True),sum(event[1] for event in event_data))

Кроме того, это кажется мне нечитаемым, вам следует разбить его на несколько строк (возможно, за исключением промежуточных результатов в разных переменных перед печатью, это было бы более читаемым).


Как вы говорите в комментариях -

Например, на этом рисунке мне нужна самая высокая строка с общим количеством точек, которые будут напечатаны, как показано в picture.

Если вам нужен элемент с наивысшим значением, тогда возьмите первый элемент, и поскольку элементы вашего массива снова будут списками, используйте индекс, чтобы получить его имя. Пример -

print("The Overall Winner is,", sorted(data, key=lambda x: sum(n[1] for n in x[1]), reverse=True)[0][0],sum(event[1] for event in event_data))

Для получения последних требований в соответствии с комментариями сделайте -

sortedlist = sorted(data, key=lambda x: sum(n[1] for n in x[1]), reverse=True)
print("The Overall Winner is,", sortedlist[0][0], sum(n[1] for n in sortedlist[0][1]))
2
ответ дан Anand S Kumar 18 August 2018 в 11:20
поделиться
  • 1
    Я не хочу, чтобы он распечатывал это, например: – user 26 August 2015 в 04:31
  • 2
    Общий победитель: [['test 5', [['Test 1', 77], ['Test 2', 99]]], ['Test 4', [['Test 1', 3], [ 'Test 2', 99]]]] 176 176 Является ли точка для самого высокого дома, поэтому я хочу напечатать строку наивысшего названия дома – user 26 August 2015 в 04:31
  • 3
    Это ваш точный выход? – Anand S Kumar 26 August 2015 в 04:37
  • 4
    Я не изменил ни одну вашу логику, просто перешел от предположения Python 2.x к Python 3. – Anand S Kumar 26 August 2015 в 04:38
  • 5
    Например, на этом снимке я хочу наивысшую строку с общим количеством точек для печати gyazo.com/583f5ef505ae3e248c59c0a210903c36 – user 26 August 2015 в 04:40

Ваша проблема в том, что вы используете распаковку аргументов в лямбда при использовании Python 3. Вместо этого:

lambda(x,y): sum(n[1] for n in y)

Сделайте это:

lambda item: sum(n[1] for n in item[1])
1
ответ дан Cyphase 18 August 2018 в 11:20
поделиться
  • 1
    ошибка пришла в голову – user 26 August 2015 в 04:27
  • 2
    Traceback (последний последний вызов): файл «C: \ Users\regan Kelly \ Desktop \ LOLOPLO.py», строка 75, в & lt; module & gt; main () Файл «C: \ Users\regan Kelly \ Desktop \ LOLOPLO.py», строка 70, в основной печати («Общий победитель», «отсортирован» (данные, лямбда-элемент: сумма (n [1 ] для n в элементе [1]), reverse = True), sum (событие [1] для события в event_data)) TypeError: должен использовать аргумент ключевого слова для ключевой функции – user 26 August 2015 в 04:27
  • 3
    @ReganKelly, вам нужно сказать key=lambda item: sum(n[1] for n in item[1]. Обратите внимание на `key = ... '. – Cyphase 26 August 2015 в 04:32
  • 4
  • 5
    На этой фотографии я просто хочу, чтобы она печатала «House o & quot; где находится список, поэтому строка для наивысших точек – user 26 August 2015 в 04:39
Другие вопросы по тегам:

Похожие вопросы: