ИСКРА собирать побочные эффекты не совсем понятны - PullRequest
0 голосов
/ 24 июня 2018

В постоянном стремлении к знаниям и просвещению других, я отмечаю, что приведенное ниже утверждение rdd3 работает без сбора, но не с сбором.Я удивляюсь, почему, как будто вы можете запутаться, когда читаете, что делает коллекция.Примеры придуманы, поэтому не беспокойтесь об этом.

NP:

val rdd = sc.parallelize(List((" aaa", "x"), ("bbbb ", "y"), (" cc ", "z"), ("gggg  ", " a"), ("    ", "b")))
val rdd2 = rdd.map{ case (field1, field2) => ( field1.replaceAll(" ", ""), field1.trim, field1, field2) }.collect
val rdd3 = rdd2.map{ case (field1, field2, field3, field4) => (field1.replaceAll(" ", ""), if (field1.trim == "") " "  else field1 , field3, field4) }

Проблема:

val rdd3 = rdd2.map{ case (field1, field2, field3, field4) => (field1.replaceAll(" ", ""), if (field1.trim == "") " "  else field1 , field3, field4) }.collect

Возвращает:

notebook:7: error: missing argument list for method collect in trait TraversableLike
Unapplied methods are only converted to functions when a function type is expected.
You can make this conversion explicit by writing `collect _` or `collect(_)(_)` instead of `collect`.
val rdd3 = rdd2.map{ case (field1, field2, field3, field4) => (field1.replaceAll(" ", ""), if (field1.trim == "") " "  else field1 , field3, field4) }.collect

Трудно следовать за новичком.Как бы мне обойти это, глядя на сообщение об ошибке?

1 Ответ

0 голосов
/ 24 июня 2018

метод collect () возвращает вывод всего rdd / набора данных в виде массива на компьютер-драйвер.

Итак, в вашем примере rdd2 возвращает массив на машину-драйвер, поэтому вы не можете использовать его как RDD. Удалите метод сбора при создании rdd2, тогда ваше третье заявление о сборе должно сработать.

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