Почему метод foreach набора данных Spark требует явного преобразования функции, а map - нет? - PullRequest
0 голосов
/ 09 ноября 2018

Где UserData.retrieve имеет тип (m: Map[String, String]) => User и UserData.update имеет тип (r: spark.sql.Row) => Unit

почему

receipts map UserData.retrieve

работает нормально, но когда я запускаю

events foreach UserData.update

это приводит к следующей ошибке:

missing argument list for method update in object UserData Unapplied methods are only converted to functions when a function type is expected. You can make this conversion explicit by writing `update _` or `update(_)` instead of `update`.

Я вижу в документации, что map ожидает func: (T) ⇒ U, а foreach ожидает f: (T) ⇒ Unit, поэтому мне кажется, что компилятор должен преобразовать мои методы в функции для map и foreach, но вместо этого это только для map. Почему?

n.b. Я знаю, что могу заставить этот foreach вызов работать, явно преобразовав его,

receipts.foreach.(UserData.update(_))

но здесь я прошу помощи, чтобы понять, почему я должен.

1 Ответ

0 голосов
/ 09 ноября 2018

Неприменимые методы преобразуются в функции только тогда, когда ожидается тип функции.

foreach в наборе данных перегружен и может вызываться с помощью ForeachFunction [T] или T => Unit.

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

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