在Spark中使用JOIN缩小表范围

h5qlskok  于 2023-03-09  发布在  Apache
关注(0)|答案(1)|浏览(160)

我在S3中存储了2个文件:
1.电影:~10 mils记录
1.额定值:~1 mils记录
我想读取和存储输出为 parquet 如下:
1.电影:仅限分级文件中可用的电影。
1.额定值:加载所有内容。
我应该使用临时表和下面的SQL查询来实现这一点吗?但是我对这里的性能有疑问。
如果有什么可以改进的地方?我该怎么做?
谢谢。

title.createOrReplaceTempView("TMPtitles")
rating.createOrReplaceTempView("TMPratings")

title_rating = spark.sql("""
        SELECT titles.movie_id, titles.movie_type, titles.primary_title, titles.original_title, titles.is_adult, titles.start_year,
            titles.end_year, titles.runtime_minutes, titles.genres
        FROM TMPtitles titles
        WHERE EXISTS (SELECT 1 FROM TMPratings ratings WHERE titles.movie_id = ratings.movie_id)
        """)
8cdiaqws

8cdiaqws1#

你最好做一个连接,而不是WHERE EXISTS,你也可以广播收视率表,这将提高性能。

SELECT /*+ BROADCASTJOIN(TMPratings) */ * 
FROM TMPtitles JOIN TMPratings
ON TMPtitles.movie_id = TMPratings.movie_id

相关问题