【问题标题】:CosmosDB query runs extremely fast, but same query in Pyspark SQL takes agesCosmosDB 查询运行速度极快,但 Pyspark SQL 中的相同查询需要很长时间
【发布时间】:2022-09-17 05:13:25
【问题描述】:

我正在运行如下查询:

SELECT c.Name, count(c.Enabled) as Redeemed
FROM c
WHERE NOT IS_NULL(c.Enabled)
AND c.Name NOT IN (\'EXAMPLE1\', \'EXAMPLE2\')
GROUP BY c.Name

在具有 5000 万条记录的 cosmos DB 表(使用 spark.cosmos.read 和 customQuery)上,它在 0.05 秒内返回一行。在执行查询后,在大型 Pyspark 集群上运行的相同查询在操作 if not df.rdd.isEmpty() 上需要一个多小时。

这只是 pyspark 的本质,还是我以低效的方式进行查询?我是否应该不使用自定义查询,而是过滤数据框?

编辑:我不完全确定为什么,但是将 Restrictive 的分区策略添加到查询选项使这下降到几秒钟。

  • 欢迎!了解有关您在 pyspark 中运行的内容的更多详细信息会很有帮助。例如:您是否通过 spark 连接器查询 Cosmos DB?或者这些数据是否像数据湖一样存在于其他地方?请编辑以澄清。
  • 你能详细说明一下吗\"执行查询后\"?另外,您是如何创建df 的?这可能是df = spark.sql(...) 吗?

标签: pyspark apache-spark-sql azure-cosmosdb azure-cosmosdb-sqlapi


【解决方案1】:

解决方案是将"spark.cosmos.partitioning.strategy": "Restrictive" 添加到查询选项中,由于某种原因,这在返回小型数据集时显然效果很好,即使在查询大型数据集时也是如此。这样做使它从一个多小时缩短到几秒钟。

【讨论】:

    猜你喜欢
    • 2016-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 2016-02-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多