azure - Databricks parquet 读取时间太长

标签 azure scala apache-spark azure-databricks

我有两组独立的文件,具有不同的架构,存储在 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/

相关文章:

azure - 使用 https ://webchat. botframework.com/发送消息

Scala:如何根据预期分布生成数字?

mongodb - 如何将spark的流数据下沉到Mongodb?

azure - 计算 Azure 数据库的成本

azure - 在发布函数之前,我可以创建 Azure 函数应用的事件网格订阅吗?

java - 如何将 Scala 集合 Seq[(Int, Seq[String])] 转换为 Java 集合 List[(int, List[String])]?

java - Spark Java DataFrame 中的合并列

hadoop - Spark 合并与 HDFS getmerge

azure - 从 Microsoft 门户 Azure Active Directory 获取错误问题

scala - 在Scala中一次分配多个变量