首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >partitionColumn,lowerBound,upperBound,numPartitions参数的含义是什么?

partitionColumn,lowerBound,upperBound,numPartitions参数的含义是什么?
EN

Stack Overflow用户
提问于 2016-12-11 10:35:07
回答 4查看 31.4K关注 0票数 54

在Spark中通过JDBC连接从Server获取数据时,我发现可以设置一些并行化参数,如partitionColumnlowerBoundupperBoundnumPartitions。我已经通过了火花文档,但无法理解它。

有人能解释一下这些参数的含义吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-03-10 17:13:35

实际上,上面的列表遗漏了一些东西,特别是第一个和最后一个查询。

没有它们,您将丢失一些数据( lowerBound之前的数据和upperBound之后的数据)。由于下界为0,所以示例中的内容不清楚。

完整的清单应是:

代码语言:javascript
复制
SELECT * FROM table WHERE partitionColumn < 100

SELECT * FROM table WHERE partitionColumn BETWEEN 0 AND 100  
SELECT * FROM table WHERE partitionColumn BETWEEN 100 AND 200  

..。

代码语言:javascript
复制
SELECT * FROM table WHERE partitionColumn > 9000
票数 34
EN

Stack Overflow用户

发布于 2016-12-11 11:19:12

它很简单:

  • partitionColumn是一个列,应该用来确定分区。
  • lowerBoundupperBound确定要获取的值的范围。完整数据集将使用与以下查询相对应的行: 从partitionColumn在lowerBound和upperBound之间的表中选择*
  • numPartitions确定要创建的分区的数量。lowerBoundupperBound之间的范围被划分为numPartitions,每一个步幅等于: upperBound / numPartitions - lowerBound / numPartitions 例如,如果:
代码语言:javascript
复制
- `lowerBound`: 0
- `upperBound`: 1000
- `numPartitions`: 10

Stride等于100,分区对应于以下查询:

代码语言:javascript
复制
- `SELECT * FROM table WHERE partitionColumn BETWEEN 0 AND 100`
- `SELECT * FROM table WHERE partitionColumn BETWEEN 100 AND 200`
- `...`
- `SELECT * FROM table WHERE partitionColumn BETWEEN 900 AND 1000`

票数 34
EN

Stack Overflow用户

发布于 2018-09-01 21:27:21

创建分区不会因过滤而导致数据丢失。upperBoundlowerboundnumPartitions只是定义了如何创建分区。upperBoundlowerbound没有为要获取的partitionColumn值定义范围(筛选器)。

代码语言:javascript
复制
For a given input of lowerBound (l), upperBound (u) and numPartitions (n) 
The partitions are created as follows:

stride, s= (u-l)/n

**SELECT * FROM table WHERE partitionColumn < l+s or partitionColumn is null**
SELECT * FROM table WHERE partitionColumn >= l+s AND <2s  
SELECT * FROM table WHERE partitionColumn >= l+2s AND <3s
...
**SELECT * FROM table WHERE partitionColumn >= l+(n-1)s**

例如,对于upperBound = 500lowerBound = 0numPartitions = 5。分区将按照以下查询进行:

代码语言:javascript
复制
SELECT * FROM table WHERE partitionColumn < 100 or partitionColumn is null
SELECT * FROM table WHERE partitionColumn >= 100 AND <200 
SELECT * FROM table WHERE partitionColumn >= 200 AND <300
SELECT * FROM table WHERE partitionColumn >= 300 AND <400
...
SELECT * FROM table WHERE partitionColumn >= 400

根据partitionColumn的实际值范围,每个分区的结果大小将有所不同。

票数 28
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41085238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档