Ich habe zwei .txt Datendateien. Der erste enthält zwei Spalten (Film, Kino) und der zweite enthält zwei Spalten (Film, Betrachter), wie im folgenden Beispiel gezeigt. Was ich tun möchte, ist finden Sie den Film, der in cinema_1
mit der maximalen Anzahl der Zuschauer gezeigt wurde.Verbinden Sie zwei Datenrahmen, summieren Sie die Werte und erhalten Sie das Maximum
+----------+---------+
| movie | cinema |
+----------+---------+
| movie_1 | cinema_2 |
| movie_2 | cinema_3 |
| movie_4 | cinema_1 |
| movie_3 | cinema_1 |
+------+-------------+
+----------+---------+
| movie | viewers |
+----------+---------+
| movie_1 | 10 |
| movie_2 | 98 |
| movie_4 | 100 |
| movie_3 | 19 |
| movie_1 | 340 |
| movie_3 | 31 |
+------+-------------+
das heißt in dem obigen Beispiel sind die beiden Kandidaten movie_3
und movie_4
(in cinema_1 gezeigt) und die richtige Antwort ist movie_4
mit 100 Ansichten (movie_3
während 50 (19 + 31) Ansichten).
Was ich bisher getan habe:
Schritt 1: Holen Sie sich die Daten
val moviesCinemas = sparkSession.read
.format("com.databricks.spark.csv")
.option("header", "true")
.option("mode", "DROPMALFORMED")
.load("moviesCinemas.txt");
val moviesViewers = sparkSession.read
.format("com.databricks.spark.csv")
.option("header", "true")
.option("mode", "DROPMALFORMED")
.load("moviesViewers.txt");
Schritt 2: Lassen Sie sich die Filme in cinema_1
gezeigt
val cinema1Movies = moviesCinemas.filter(col("cinema").like("cinema_1"))
führende zu:
+----------+---------+
| movie | cinema |
+----------+---------+
| movie_4 | cinema_1 |
| movie_3 | cinema_1 |
+------+-------------+
Schritt 3: Jetzt für diese zwei Filme muss ich ihre Zuschauer zusammenfassen (vom Datenrahmen moviesViewers
) und den mit der maximalen Zahl melden. Hier stecke ich eigentlich fest.
Ich habe versucht, die cinema1Movies
und moviesViewers
Datenrahmen
val joinMoviesViewers = moviesViewers.join(cinema1Movies, Seq("movie"))
, die folgendes Ergebnis gibt zu verbinden: Ich bin nicht ganz sicher,
+----------+---------+
| movie | viewers |
+----------+---------+
| movie_4 | 100 |
| movie_3 | 19 |
| movie_3 | 31 |
+------+-------------+
Nun, wie die viewers
für jede movie
zusammenzufassen um so etwas zu bekommen (und endlich den Film mit den Max-Viewern zu bekommen):
+----------+---------+
| movie | viewers |
+----------+---------+
| movie_4 | 100 |
| movie_3 | 50 |
+------+-------------+
Es funktioniert, aber anstelle von '.getLong (0)' add '.getDouble (0)'. Andernfalls erhalten Sie eine Ausnahme. Bitte bearbeiten Sie Ihre Antwort, um sie zu akzeptieren. Danke vielmals. –