我需要从数据帧中创建 tempViews,然后我需要加入这些 tempviews 并删除重复的列。因此,我编写了如下所述的代码:
Data1 = [ ("xx1",34,60),
("xx2",33,80),
("xx3",37,50) ]
dataSchema1 = StructType([
StructField("Name",StringType(),True),
StructField("Age",IntegerType(),True),
StructField("Id",IntegerType(),True)
])
Data2 = [ (60,"M",3000.60),
(80,"F",3300.80),
(50,"M",5000.50) ]
dataSchema2 = StructType([
StructField("Id",IntegerType(),True),
StructField("Gender", StringType(), True),
StructField("Salary", DoubleType(), True)
])
df1 = spark.createDataFrame(spark.sparkContext.parallelize(Data1),schema=dataSchema1)
df1.createOrReplaceTempView('view1')
df2 = spark.createDataFrame(spark.sparkContext.parallelize(Data2),schema=dataSchema2)
df2.createOrReplaceTempView('view2')
jDF=spark.sql("select * from view1 join view2 on view1.Id = view2.Id")
jDF.columns // ['Name', 'Age', 'Id', 'Id', 'Gender', 'Salary']
rjDF=jDF.drop('view2.ID') //this function is not working
rjDF.columns // ['Name', 'Age', 'Id', 'Id', 'Gender', 'Salary']
在上面的代码中,drop column 方法没有按预期工作,也没有抛出任何错误。但是,如果我尝试使用数据框删除列(在我的用例中这显然不是我的首选),那么 drop 方法可以正常工作。
joinDF=df1.join(df2, df1.Id == df2.Id)
dropped=joinDF.drop(df2.Id) // working absolutely fine
dropped.columns // ['Name', 'Age', 'Id', 'Gender', 'Salary']
谁能帮助我理解从加入的临时视图中删除列的第一种方法有什么问题?