apache-spark - 可空 unicode 字符串的 Spark SQL 排名
问题描述
我们正在研究 Spark SQL。我们正在使用一些可以为空的字符串字段进行排名。
问题是:在 Spark SQL 中,null
值排在第一位。但是,我们希望null
价值最终到来。因此,我们应用了 CASE WHEN 逻辑。由于我们有 Unicode 数据,“ZZZZZZZZ”最终不会出现。它将领先于日语、中文地址行。
请让我们知道,对于空字符串值使用哪个字符串常量文字,以便它们在 ORDER BY 的情况下出现在最后。
我在下面放了示例代码。
SELECT CompanyName,
ROW_NUMBER() OVER
(
PARTITION BY O.CompanyName
ORDER BY
CASE WHEN AddressLine1 IS NOT NULL THEN AddressLine1 ELSE "ZZZZZZZZ" END ASC
) AS BestDataForCompany
FROM CompanyData
解决方案
Spark SQL 中的排名函数支持该NULLS LAST
参数,因此这将起作用:
SELECT
CompanyName,
AddressLine1,
ROW_NUMBER() OVER ( PARTITION BY CompanyName ORDER BY AddressLine1 ) BestDataForCompany1,
ROW_NUMBER() OVER ( PARTITION BY CompanyName ORDER BY CASE WHEN AddressLine1 IS NULL THEN 1 ELSE 0 END, AddressLine1 DESC ) BestDataForCompany2,
ROW_NUMBER() OVER ( PARTITION BY CompanyName ORDER BY AddressLine1 NULLS LAST ) BestDataForCompany3
FROM CompanyData
推荐阅读
- python - 如何在python中调用函数?
- c# - 如何从列表中排除项目
- python - 在 PyCharm 中标记目录作为源的 python 等价物是什么?
- javascript - 根据选中的复选框数生成动态 li 元素
- java - Java+docker RSS 调优glibc bug
- django - 在带有 SQL Lite 的 Django 中使用 bootstrap.min.css 时,在 Python 中出现一系列错误后,连接中止并出现 WinError 10053
- r - 将 n 个元素的列表拆分为一个包含 n 个向量的数据帧
- dataframe - 将带有 String 的 Julia DataFrame 列转换为带有 Int 和缺失值的列
- json - GetStream.ClientError.jsonDecode 在获取 getStream 中的活动时出错
- sql-server - 识别两个表之间的重复项并删除创建时间较早的表