Фильтр не будет принимать целые числа? Spark DataFrame - PullRequest
0 голосов
/ 17 октября 2019

Я работаю над набором данных Yelp, используя Spark Dataframe. У меня проблемы с использованием фильтра ().

Кажется, я не могу указать целые числа, только строки?

Вот мой код

def fiveStarBusinessesDF(yelpBusinesses: DataFrame):DataFrame = {
    yelpBusinesses.select("name", "stars", "review_count").filter("stars" == 5, "review_count" >= 1000)
  }

Вот одна строка из набора данных yelp:

{"business_id":"1SWheh84yJXfytovILXOAQ","name":"Arizona Biltmore Golf Club","address":"2818 E Camino Acequia Drive","city":"Phoenix","state":"AZ","postal_code":"85016","latitude":33.5221425,"longitude":-112.0184807,"stars":3.0,"review_count":5,"is_open":0,"attributes":{"GoodForKids":"False"},"categories":"Golf, Active Life","hours":null}

Очевидно, что звезды и review_count являются целыми числами, а не строками.

Выводом моей функции должен быть DataFrame с именами, звездочками и review_count всего бизнеса с 5 звездочками, и больше или равен 1000 review_count.

Ответы [ 3 ]

1 голос
/ 17 октября 2019

Попробуйте использовать это:

def fiveStarBusinessesDF(yelpBusinesses: DataFrame):DataFrame = {
    yelpBusinesses.select("name", "stars", "review_count")
                  .filter("$stars" == 5 && "$review_count" >= 1000)
  }

или как это:

import org.apache.spark.sql.functions._

def fiveStarBusinessesDF(yelpBusinesses: DataFrame):DataFrame = {
        yelpBusinesses.select("name", "stars", "review_count")
                      .filter(col("stars") == lit(5) && col("review_count") >= lit(1000))
      }
1 голос
/ 17 октября 2019

Я бы попробовал:

    import spark.implicits._
    def fiveStarBusinessesDF(yelpBusinesses: DataFrame):DataFrame = {
       yelpBusinesses.select("name", "stars", "review_count")
                   .filter($"stars" === 5 && $"review_count" >= 1000)
    }
1 голос
/ 17 октября 2019

попробуйте привести к int

    import spark.implicits._
    def fiveStarBusinessesDF(yelpBusinesses: DataFrame):DataFrame = {
        yelpBusinesses.select('name, 'stars, 'review_count)
                      .filter('stars.cast("int") === 5 || 'review_count.cast("int") >= 1000)
      }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...