我正在尝试使用镶木地板上的删除功能,但我正在获得例外的功能除外
;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