在循环中完成时,spark withColumn无法创建新数据框

时间:2019-05-11 00:21:53

标签: scala apache-spark dataframe

我有一个数据框,其中已将其根据满足条件的列ID分为“ matchedDF”和“ unmatchedDF”。这样可行;然后我有一个数组中的列集合,我进行了foreach来更新matchedDF中的匹配列,并将结果转换为新的DF(因为我知道DF是不可变的)。当我想让循环指向将要更新的列时,就会出现创建newrow对象的问题。循环存在问题,withColumn无法正常工作,我得到

  

笔记本:6:错误:未找到:值$ x     var newrow = matchDF.withColumn($ x,lit(“ 0”))。toDF()

这是在Azure Databricks 5.2上(包括Apache Spark 2.4.0,Scala 2.11)。我可以不使用lamda / foreach来执行此操作,但这是一次性的,并且我需要处理多个专栏。

var notmatchDF = df.filter(!$"id".rlike (regexString)).toDF()

var matchDF = df.filter($"id".rlike (regexString)).toDF()

columnControl.foreach(x => {
  var newrow = matchDF.withColumn($x, lit("0")).toDF()
  val appended = notmatchDF.union(newrow).toDF()
})

我希望在newrow数据框中将columnControl中提供的列设置为“ 0”,然后可以将其附加到notmatchDF

0 个答案:

没有答案