2つの.txtデータファイルがあります。次の例に示すように、最初の列には2つの列(ムービー、シネマ)が含まれ、2つ目の列には2つの列(ムービー、ビューア)が含まれます。私がしたいことは、に表示された映画をcinema_1
に最大視聴人数で見つけることです。上記の例では2つのデータフレームを結合し、値を合計して最大値を取得します。
+----------+---------+
| 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 |
+------+-------------+
すなわち2つの候補は、movie_3
とmovie_4
(cinema_1に示されている)であり、(movie_3
は50(19 + 31)のビューを有している)正しい答えが100件の景色をmovie_4
です。
ステップ1:取得データは
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");
ステップ2:映画はcinema_1
val cinema1Movies = moviesCinemas.filter(col("cinema").like("cinema_1"))
に示す取得し、私はこれまで何をやったか
〜へ:
+----------+---------+
| movie | cinema |
+----------+---------+
| movie_4 | cinema_1 |
| movie_3 | cinema_1 |
+------+-------------+
ステップ3:これらの2つの映画について、視聴者(データフレームmoviesViewers
から)を合計して、最大数のものを報告する必要があります。これは私が実際につかまれている場所です。
+----------+---------+
| movie | viewers |
+----------+---------+
| movie_4 | 100 |
| movie_3 | 19 |
| movie_3 | 31 |
+------+-------------+
は、今私は、各movie
ためviewers
を合計するかどうかはかなりわからない:次のような結果になります、私はcinema1Movies
とmoviesViewers
データフレーム
val joinMoviesViewers = moviesViewers.join(cinema1Movies, Seq("movie"))
に参加しようとした
このようなものを得るために(そして最後に最大の視聴者で映画を入手する):
+----------+---------+
| movie | viewers |
+----------+---------+
| movie_4 | 100 |
| movie_3 | 50 |
+------+-------------+
これは動作しますが、 '.getLong(0)'の代わりに '.getDouble(0)'を追加してください。それ以外の場合は、例外が発生します。それを受け入れるためにあなたの答えを編集してください。どうもありがとう。 –