Ошибка использования фильтра по значению столбца с фреймом данных Spark - PullRequest
0 голосов
/ 04 июня 2019

Пожалуйста, обратитесь к моему примеру кода ниже:

sampleDf -> мой примерный фрейм данных Scala, который я хочу отфильтровать по 2 столбцам startIPInt и endIPInt.

var row = sampleDf.filter("startIPInt <=" + ip).filter("endIPInt >= " + ip)

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

println(row)

Но этот код выполняется слишком долго:

row.show()

Итак, мой вопрос: как мне просмотреть содержимое этого объекта строки? Или есть проблема с тем, как я фильтрую свой фрейм данных?

Мой первоначальный подход состоял в том, чтобы использовать фильтр, как упомянуто здесь: https://spark.apache.org/docs/1.5.0/api/java/org/apache/spark/sql/DataFrame.html#filter(java.lang.String)

В соответствии с этим, следующая строка кода выдает ошибку об «перегруженном методе 'filter'":

var row = sampleDf.filter($"startIPInt" <= ip).filter($"endIPInt" >= ip)

Может кто-нибудь помочь мне понять, что здесь происходит? И это правильный и самый быстрый способ фильтрации и получения содержимого фрейма данных, как указано выше.

1 Ответ

1 голос
/ 04 июня 2019

Во-первых, используя filter, вы на самом деле не получаете объект строки / строки, вы получите новый фрейм данных.

Причина, по которой show выполняется дольше, заключается в ленивости Spark.Он будет вычислять преобразования только тогда, когда на кадре данных предприняты действия (см., Например, Преобразование искры - почему оно ленивое и в чем преимущество? ).Использование println в кадре данных ничего не даст, и преобразования фильтра фактически не будут вычислены.show с другой стороны требует некоторых вычислений, поэтому его выполнение выполняется медленнее.

Использование

sampleDf.filter("startIPInt <=" + ip).filter("endIPInt >= " + ip)

и

sampleDf.filter($"startIPInt" <= ip).filter($"endIPInt" >= ip)

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

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