首页 > 解决方案 > 可空 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

标签: apache-sparkunicodenullapache-spark-sqldatabricks

解决方案


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

我的结果: 在此处输入图像描述


推荐阅读