0

データフレームから 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']

上記のコードでは、ドロップ カラム メソッドが期待どおりに動作しておらず、エラーも発生していません。ただし、データ フレームを使用して列をドロップしようとすると (これは私のユース ケースでは明らかに好ましい選択ではありません)、ドロップ メソッドは正常に機能します。

joinDF=df1.join(df2, df1.Id == df2.Id)
dropped=joinDF.drop(df2.Id)    // working absolutely fine
dropped.columns               // ['Name', 'Age', 'Id', 'Gender', 'Salary']

結合された一時ビューから列を削除する最初のアプローチの何が問題なのかを理解するのに誰か助けてもらえますか?

4

1 に答える 1