我有来自 SQL Server 的数据,需要在 Apache Spark (Databricks) 中进行操作。
在 SQL Server 中,此表的三个键列使用区分大小写的 COLLATION 选项,因此这些特定列区分大小写,但表中的其他列不区分大小写。这些列是来自供应商应用程序的简短的字母数字标识符,我们必须能够在谓词和连接条件中以区分大小写的方式使用它们,同时能够以不区分大小写的方式使用其他列。
该表已导出为 CSV。
除了使用lower和upper函数之外,有没有办法在DataFrame中混合区分大小写和不区分大小写的列比较?我也可以将此 CSV 导入到 Databricks 表中,但这似乎没有在元数据级别为联接提供类似的整理选项。
谢谢你。
最佳答案
Spark 2.x 中没有这样的选项。
如果您需要为下游处理保留数据的大小写,但您还需要不区分大小写的比较,您有三个选择:
df.where('x ciLT 'y) // ciLT is case-insensitive less than, as an example
如果您主要在
WHERE
中使用不区分大小写的操作和 ORDER/SORT BY
性能将非常好,因为数据行不会被加宽以进行处理。否则,列将在 Spark 的内部行中“具体化”,并且会有小的性能损失。如果您不需要为下游处理保留数据的案例,那么在摄取期间切换到通用案例表示是正确的方法。
关于apache-spark - Spark - Spark DataFrame、Spark SQL 和/或 Databricks 表中的混合区分大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52129127/