【问题标题】:Partitioning Postgres Read in Spark在 Spark 中对 Postgres 读取进行分区
【发布时间】:2019-09-12 11:21:03
【问题描述】:

我正在尝试使用 SparkSQl 从 postgres 中查询大量数据。我确实在查询阶段看到了 100 个分区,但是,只有一个查询正在运行,并且只有一个执行器正在执行。

代码:

df = sqlcontext.read.format('jdbc').options(url=params['url']
                                            ,driver=params["driver"]
                                            ,dbtable=tableName
                                            ,user=params['user']
                                            ,password=params['password']
                                            ,numPartitions=numberOfPartitions
                                            ,partitionColumn=partitionC
                                            ,lowerBound=lowerB
                                            ,upperBound=upperB).load()

partitionC 是日期类型,我什至在数字列上尝试过类似的事情。我还确保数据平衡良好。

如何让spark对postgres执行多个查询?

已经提到 SparkSQL PostgresQL Dataframe partitions

【问题讨论】:

    标签: postgresql apache-spark


    【解决方案1】:

    请提供数字列作为分区列。

    提供数值列的下限值和上限值。

    请保持分区数为 10。如果有太多数据库可能会阻塞。

    【讨论】:

    • 我用数字列试过了,但没有运气。当我用数字列尝试时,下限值和上限值分别是数字
    • 上下限是数值列的最小值和最大值
    • 并查看执行器选项卡中有多少执行器正在处理。也请缓存并计算而不是显示在数据框中。
    • @NehaJirafe 你还是有这个问题。
    【解决方案2】:

    事实证明,您需要在数据库中对数据进行分区的列上有一个索引。

    所以下面的实现是相当有效的。

    df = sqlcontext.read.format('jdbc').options(url=params['url']
                                                ,driver=params["driver"]
                                                ,dbtable=tableName
                                                ,user=params['user']
                                                ,password=params['password']
                                                ,numPartitions=numberOfPartitions
                                                ,partitionColumn=partitionC
                                                ,lowerBound=lowerB
                                                ,upperBound=upperB).load()
    

    partitionCnumeric 类型的时间戳,在数据库中有索引

    【讨论】:

      猜你喜欢
      • 2017-08-26
      • 2022-10-13
      • 2017-01-28
      • 2021-07-23
      • 2020-08-21
      • 1970-01-01
      • 1970-01-01
      • 2016-09-19
      • 1970-01-01
      相关资源
      最近更新 更多