constraintsuggestionrunner不占用用反记号括起来的列

pftdvrlh  于 2021-07-12  发布在  Spark
关注(0)|答案(1)|浏览(327)

我目前正在从一个excel表导入数据集,该表的列名带有如下点字符 ".xyz" .
我问了几个stackoverflow问题,它说我们可以用带反勾的列名替换它,如下所示: "'.xyz'" . 因此,我重命名了所有的列名,这些列名中有一个点,名称相同,但用反记号括起来,如下所示:

df.columns.foreach(item => {
      if(item.contains("."))
        {
          df.withColumnRenamed(item, s"`$item`")
        }
    })

现在,当我在constraintsuggestionrunner类中传递这个Dataframe时,如下所示:

val suggestionResult = ConstraintSuggestionRunner()
      .onData(df)
      .addConstraintRules(Rules.DEFAULT)
      .setKLLParameters(KLLParameters(sketchSize = 2048, shrinkingFactor = 0.64, numberOfBuckets = 10))
      .run()

我遇到了如下错误:
错误main:org.apache.spark.sql.analysisexception:无法解析 '.xyz' 给定输入列:
如何解决此错误?

bn31dyow

bn31dyow1#

逃逸必须在deequ处理,但问题总是公开的。您在这里所做的是添加反勾号作为列名的一部分,而不是转义它们。
你可以试着用另一个类似于下划线的大篷车来代替这些点 _ 然后将带有重命名列的Dataframe传递给 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()

相关问题