sparksql查询要比单个Parquet慢得多

eivnm1vs  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(383)

我发现使用sparksql(来自pyspark)来查询从多个Parquet文件生成的Dataframe的效率远远低于从单个Parquet文件生成的相同数量的数据,尽管过滤条件不是第一列(因此我猜它不是索引内容)。有人知道为什么会这样吗?我怎样才能使查询响应时间和后者一样高效呢?


# the parquet files are stored on hdfs

hdfs_path = 'hdfs://localhost:9000/Test/'
paths = [hdfs_path+'p1.parquet', hdfs_path+'p2.parquet', hdfs_path+'p3.parquet']

# laod the parquet files into a DataFrame

dfs = sqlContext.read.parquet(*paths)

# query from the DataFrame

sql = '_c2 > 4 and _c2 < 10'
query_result = dfs.filter(sql).collect() # slower

# now write the DataFrame as 1 parquet and reload

dfs.write.mode('overwrite').parquet(hdfs_path+'all_in_one.parquet')
df = sqlContext.read.parquet(hdfs_path+'all_in_one.parquet')

# the query response time is much faster

query_result = df.filter(sql).collect() # faster
k2fxgqgv

k2fxgqgv1#

回答我自己的问题:
主要原因似乎是每个文件太小,元数据检查时间主导了查询响应时间。当文件足够大(即,至少大于块大小,它应该是),查询响应时间将由结果io决定。

相关问题