使用配置单元上下文对其中包含数字的字符串列进行排序
Ordering of a string column that contains numbers in it using hive context
我在文件中的其他列中有一个名为 priority 的列,其中包含数字,例如:1、2、3、4、5、6 等。
文件数据如下
Department Strength Priority
--------------------------------
CS Good 10
CS Low 2
EC Good 10
EC Low 2
EC Nil 3
我想 select 使用 SQL 配置单元上下文的查询来 select 优先级为 2 的记录,如下所示
select * from
(
select testfile.*,row_number() over(partition by Department order by Priority asc) rn
from testfile
)ranked
where rn=1;
所有列在spark代码中都定义为String。我希望代码为 select 优先级 2 记录,因为我在 order by
子句中给出了 asc
。但是是否有可能查询 select 的优先级不是 2 只是因为我没有将优先级列声明为 int。现在查询获取以下数据
CS Good 10
EC Good 10
但是,如果我将优先级列声明为 int
,记录将正确显示如下
CS Low 2
EC Low 2
我想了解一下。有几个实例,我将数字列声明为字符串,但得到了正确的排序。
order by
使用的是lexicographical order,类似于字母顺序,但字母顺序实际上是一种字典顺序。
这意味着以下字符串将按以下顺序排列
1 < 2
10 < 2
1000 < 2
1 < 11
10 < 11
21 < 3
简单来说,你可以说它是按每个字符位置排序的,但你可以从回复中阅读更多内容 and here
此外,您可以选择将列转换为整数以实现数字排序,例如
SELECT
*
FROM (
SELECT
testfile.*,
row_number() over(partition by Department order by cast(Priority as int) asc) rn
FROM
testfile
) ranked
where rn=1;
我在文件中的其他列中有一个名为 priority 的列,其中包含数字,例如:1、2、3、4、5、6 等。 文件数据如下
Department Strength Priority
--------------------------------
CS Good 10
CS Low 2
EC Good 10
EC Low 2
EC Nil 3
我想 select 使用 SQL 配置单元上下文的查询来 select 优先级为 2 的记录,如下所示
select * from
(
select testfile.*,row_number() over(partition by Department order by Priority asc) rn
from testfile
)ranked
where rn=1;
所有列在spark代码中都定义为String。我希望代码为 select 优先级 2 记录,因为我在 order by
子句中给出了 asc
。但是是否有可能查询 select 的优先级不是 2 只是因为我没有将优先级列声明为 int。现在查询获取以下数据
CS Good 10
EC Good 10
但是,如果我将优先级列声明为 int
,记录将正确显示如下
CS Low 2
EC Low 2
我想了解一下。有几个实例,我将数字列声明为字符串,但得到了正确的排序。
order by
使用的是lexicographical order,类似于字母顺序,但字母顺序实际上是一种字典顺序。
这意味着以下字符串将按以下顺序排列
1 < 2
10 < 2
1000 < 2
1 < 11
10 < 11
21 < 3
简单来说,你可以说它是按每个字符位置排序的,但你可以从回复中阅读更多内容
此外,您可以选择将列转换为整数以实现数字排序,例如
SELECT
*
FROM (
SELECT
testfile.*,
row_number() over(partition by Department order by cast(Priority as int) asc) rn
FROM
testfile
) ranked
where rn=1;