Glu*_*luz 6 scala apache-spark apache-spark-sql spark-dataframe
我有一个数据框,当另存为Parquet格式时,它需要约11GB。读取数据框并写入json时,需要5分钟。当我添加partitionBy(“ day”)时,需要几个小时才能完成。我知道分配到分区是一项昂贵的操作。有没有办法使其更快?对文件进行排序会更好吗?
例:
运行5分钟
df=spark.read.parquet(source_path).
df.write.json(output_path)
Run Code Online (Sandbox Code Playgroud)
运行几个小时
spark.read.parquet(source_path).createOrReplaceTempView("source_table")
sql="""
select cast(trunc(date,'yyyymmdd') as int) as day, a.*
from source_table a"""
spark.sql(sql).write.partitionBy("day").json(output_path)
Run Code Online (Sandbox Code Playgroud)
尝试在repartition("day")之前添加write,如下所示:
spark
.sql(sql)
.repartition("day")
.write
.partitionBy("day")
.json(output_path)
Run Code Online (Sandbox Code Playgroud)
它应该加快您的查询。
| 归档时间: |
|
| 查看次数: |
3645 次 |
| 最近记录: |