Я работаю над известным набором данных 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
------------------------------------------------------------------------------------------------------------------^^^