scala - ConstraintSuggestionRunner 不占用用反引号括起来的列
问题描述
我目前正在从 excel 工作表中导入数据集,该工作表的列名带有像这样的点字符"abc.xyz"
。
我经历了几个 stackOverflow 问题,它说我们可以用带有反引号的列名替换它,如下所示"'abc.xyz'"
:因此,我将所有包含点的列名重命名为相同的名称,但用反引号括起来,如下所示:
df.columns.foreach(item => {
if(item.contains("."))
{
df.withColumnRenamed(item, s"`$item`")
}
})
现在,当我在 ConstraintSuggestionRunner 类中传递这个数据框时,如下所示:
val suggestionResult = ConstraintSuggestionRunner()
.onData(df)
.addConstraintRules(Rules.DEFAULT)
.setKLLParameters(KLLParameters(sketchSize = 2048, shrinkingFactor = 0.64, numberOfBuckets = 10))
.run()
我收到如下错误:
错误主要:org.apache.spark.sql.AnalysisException:无法解析
'`abc.xyz`'
给定的输入列:
如何解决此错误?
解决方案
转义必须在 Deequ 中处理,但问题始终是开放的。您在这里所做的是将反引号添加为列名的一部分,而不是转义它们。
您可以尝试用下划线之类的另一个字符替换点,_
然后将带有重命名列的数据框传递给ConstraintSuggestionRunner
:
val df1 = df.toDF(df.columns.map(_.replaceAll("[.]+", "_")):_*)
val suggestionResult = ConstraintSuggestionRunner()
.onData(df1)
.addConstraintRules(Rules.DEFAULT)
.setKLLParameters(KLLParameters(sketchSize = 2048, shrinkingFactor = 0.64, numberOfBuckets = 10))
.run()
推荐阅读
- react-native - 有什么方法可以从 React Native 中的 env 文件中获取 appcenter 配置
- php - PHP IF 语句包含 || 从一个数组
- reactjs - 如何在 ant design 或 material UI 中使用 react-hook-form
- database - 使用 UNIX 建立与 DB2 的连接
- unity3d - 脚本创建的 GameObject(Prefab 对象)在 Unity3d 中不出现在 Game View 中但出现在 Scene View 中
- time-complexity - 大写 N 与小 n 的时间复杂度
- c++ - SFML 从文件加载完成并出现错误代码
- angular - 指令中的 NgControl:没有 NgControl 的提供者
- angular - 无法设置未定义的属性“分页器” - 单元测试
- regex - 查找 Dropbox 路径在某些计算机上不起作用