我有两组独立的文件,具有不同的架构,存储在 Azure blob 存储中的 parquet 文件中,两者都存储在月/日/小时子文件夹中。
我需要按小时计划处理文件,这意味着我可以从第一个架构加载最新的文件。但是,我需要加入第二个模式中的记录,该记录可能是过去任何可能的时间。因此,为了加入正确的记录,我需要从第二个模式加载整个数据集。
在连接中使用结果之前,我正在使用spark.read.parquet(rootlocation)
。阅读这篇文章需要很长时间(几乎一个小时),这是可以理解的。有谁知道有什么策略可以优化这个吗?我似乎没有得到任何并行性,因为我只有一份工作。
最佳答案
您可以通过在读取表或两个表时提供架构来加速该过程。否则,Spark 将需要发现所有分区,找出架构等,并且当您有很多文件(特别是小文件)时,可能会花费很多时间(还要检查您是否有 .option("mergeSchema", "true")
设置):
val schema = "col1 long, col2 string, ..."
val df = spark.read.schema(schema).load("path")
或者,您可以从 Parquet 切换到 Delta Lake 表 - 在这种情况下,架构存储在 Delta 日志中,并且可以更快地获取。
关于azure - Databricks parquet 读取时间太长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76655616/