spark.sql - объединение нескольких фреймов данных. Является ли это возможным? - PullRequest
0 голосов
/ 17 октября 2019

Я работаю над известным набором данных yelp с данными о бизнесе, пользователях и обзорах.

Моя цель в коде - найти предприятия, которые были просмотрены более чем 5 пользователями, у которых более 1000отзывы каждый.

def findFamousBusinessesSQL() : DataFrame = {
    val joined = spark.sql("SELECT * FROM yelpReviewsView yr" +
      "FULL JOIN yelpUsersView yu ON yu.user_id = yr.user_id WHERE review_count > 1000" +            //Join all users based on user_id with a review count of over 1000 reviews
      "INNER JOIN yelpBusinessesView  yb ON yb.business_id = yr.business_id WHERE review_count > 5") // Join everything on business_id, only for businesses with over 5 reviews.


    spark.sql("SELECT name FROM joined ORDER BY review_count DESC") // here I get all the names from the joined variable, and order desc. by review_count.
  }

Выходными данными должны быть названия предприятий в порядке убывания на основе review_count.

Вот как выглядит 1 пользователь из данных пользователя:

{"user_id":"l6BmjZMeQD3rDxWUbiAiow","name":"Rashmi","review_count":95,"yelping_since":"2013-10-08 23:11:33","useful":84,"funny":17,"cool":25,"elite":"2015,2016,2017","friends":"c78V-rj8NQcQjOI8KP3UEA, alRMgPcngYSCJ5naFRBz5g}

Вот дата для 1 бизнеса:

{"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}

И, наконец, вот данные для 1 обзора:

{"review_id":"Q1sbwvVQXV2734tPgoKj4Q","user_id":"hG7b0MtEbXx5QzbzE6C_VA","business_id":"ujmEBvifdJM6h6RLv4wQIg","stars":1.0,"useful":6,"funny":1,"cool":0}

Я отфильтровал некоторые неважные вещи из данных, такие как обзорыдрузья пользователей и т. д.

Проблема в том, что я не могу присоединиться к тому, что мне нравится. От меня требуется использовать spark.sql для этой проблемы.

Ошибка, которую я получаю в IntelliJ, говорит:

mismatched input 'FULL' expecting <EOF>(line 1, pos 114)

== SQL ==
SELECT * FROM yelpReviewsView yr INNER JOIN yelpUsersView yu ON yu.user_id = yr.user_id WHERE review_count > 1000 FULL JOIN yelpBusinessesView  yb ON yb.business_id = yr.business_id WHERE review_count > 5
------------------------------------------------------------------------------------------------------------------^^^

...