除了函数引发异常外,spark数据帧

时间:2019-03-28 14:24:00

标签: scala apache-spark parquet

我正在尝试使用镶木地板上的删除功能,但我正在获得例外的功能除外

org.apache.spark.sql.AnalysisException:已解析的属性{dataframe的所有属性} {dataframe的所有属性}中缺少请检查是否使用了正确的属性。 除了 {整个sql计划}

代码不起作用

//reading existing parquet data
val dfi=paths.collect().par.map(x=> {
  val df=spark.read.option("basePath", pathPrefix+finalFile).parquet(pathPrefix+finalFile+x)
  df.select(df.columns.sorted.map(col):_*)
}).reduce((x,y)=> x.union(y))

//using the keys to find which data is to be deleted
var deleteRecords=parquetDeleteDF.select(keys:_*).dropDuplicates().join(dfi,keys.map(x=>x.toString()))

//deleting data from existing data
val dfl=dfi.except(deleteRecords.select(deleteRecords.columns.sorted.map(col):_*))

如果我重新创建deleteRecords数据框,同样的代码也可以正常工作

工作代码

//reading existing parquet data
val dfi=paths.collect().par.map(x=> {
  val df=spark.read.option("basePath", pathPrefix+finalFile).parquet(pathPrefix+finalFile+x)
  df.select(df.columns.sorted.map(col):_*)
}).reduce((x,y)=> x.union(y))

//using the keys to find which data is to be deleted
var deleteRecords=parquetDeleteDF.select(keys:_*).dropDuplicates().join(dfi,keys.map(x=>x.toString()))

// recreating deleteRecords dataframe
deleteRecords=spark.createDataFrame(deleteRecords.rdd, deleteRecords.schema)

//deleting data from existing data
val dfl=dfi.except(deleteRecords.select(deleteRecords.columns.sorted.map(col):_*))

我不明白为什么会出现错误以及它如何在重新创建数据框时起作用

注意:用于连接的密钥名称在两个数据框中都是相同的,并且在连接后已删除重复数据。同样在Expect函数中,两个数据框都具有相同的属性名称和数据类型。

版本信息: 星火2.3.2 斯卡拉2.11.11

0 个答案:

没有答案