首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >星火DataFrame、Spark和/或Databricks表中的火花混合大小写敏感性

星火DataFrame、Spark和/或Databricks表中的火花混合大小写敏感性
EN

Stack Overflow用户
提问于 2018-09-01 14:36:30
回答 1查看 3K关注 0票数 4

我有来自Server的数据,我需要在Apache (Databricks)中操作这些数据。

在Server中,该表的三个键列使用区分大小写的排序规则选项,因此这些特定列区分大小写,而表中的其他列则不区分大小写。这些列是来自供应商应用程序的简短的α-数字标识符,我们必须能够在谓词和连接条件中以区分大小写的方式使用它们,同时能够以不区分大小写的方式使用其他列。

表被导出为CSV。

除了使用较低和较高的函数外,是否有一种方法可以将区分大小写的列比较与不区分大小写的列进行比较?我也可以将这个CSV导入到Databricks表中,但这似乎没有为联接提供类似的元数据级别的排序选项。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-20 19:30:02

在星火2.x中没有这样的选择。

如果需要为下游处理保留数据的大小写,但也需要区分大小写的比较,则有三个选项:

  1. 使用大写/小写投影的附加列创建视图。如果您只使用SparkSQL,这是最好的选择。我不建议在持久化数据中为不区分大小写的操作实现额外的列:对于更改大小写,额外的I/O成本可能会超过CPU成本。
  2. 如果您正在使用Spark,您可以创建抽象,使您的意图更清晰,而无需过多的额外输入,并且无需创建新的列/视图,例如,如果使用Scala,则引入不区分大小写的(In)相等和比较操作符。 df.where('x ciLT 'y) // ciLT is case-insensitive less than, as an example
  3. 根据您需要编写多少代码、哪些操作需要不区分大小写的排序规则和您正在使用的语言,您可能会非常喜欢,例如,自动重写表达式,使相等和比较运算符基于表名以区分大小写或不敏感的方式运行。这需要对火花的内部结构有更深入的理解,只有当你必须以较高的代码速度管理一个大型代码库时,才有意义。

如果您主要在WHEREORDER/SORT BY中使用不区分大小写的操作,那么性能将相当好,因为数据行不会为处理而被拓宽。否则,这些列将在星火的内部行中“物化”,并将造成较小的性能损失。

如果您不需要为下游处理保留数据的情况,则在摄入期间切换到公共案例表示是正确的方法。

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

https://stackoverflow.com/questions/52129127

复制
相关文章

相似问题

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