1. ホーム
  2. python

[解決済み] Spark Dataframeは重複した名前のカラムを区別する。

2022-10-01 16:23:21

質問

Spark Dataframeでは、以下のDataframeスナップショットのように、複数のカラムが同じ名前を持つことができることを知っています。

[
Row(a=107831, f=SparseVector(5, {0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0}), a=107831, f=SparseVector(5, {0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0})),
Row(a=107831, f=SparseVector(5, {0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0}), a=125231, f=SparseVector(5, {0: 0.0, 1: 0.0, 2: 0.0047, 3: 0.0, 4: 0.0043})),
Row(a=107831, f=SparseVector(5, {0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0}), a=145831, f=SparseVector(5, {0: 0.0, 1: 0.2356, 2: 0.0036, 3: 0.0, 4: 0.4132})),
Row(a=107831, f=SparseVector(5, {0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0}), a=147031, f=SparseVector(5, {0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0})),
Row(a=107831, f=SparseVector(5, {0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0}), a=149231, f=SparseVector(5, {0: 0.0, 1: 0.0032, 2: 0.2451, 3: 0.0, 4: 0.0042}))
]

上記の結果は、データフレームと自分との結合によって作成されています。 4 カラムがあり、その両方が af .

でさらに計算をしようとすると、問題があります。 a カラムを選択する方法が見つからないことです。 a を選択する方法を見つけることができません、私は試してみました df[0]df.select('a') で、どちらも以下のようなエラーメッセージが返ってきました。

AnalysisException: Reference 'a' is ambiguous, could be: a#1333L, a#1335L.

Spark APIで、重複した名前のカラムを再度区別する方法はありますか? または、カラム名を変更できるようにする方法はありますか?

どのように解決するのですか?

のカラム名を変更することをお勧めします。 join .

df1.select(col("a") as "df1_a", col("f") as "df1_f")
   .join(df2.select(col("a") as "df2_a", col("f") as "df2_f"), col("df1_a" === col("df2_a"))

その結果 DataFrame には schema

(df1_a, df1_f, df2_a, df2_f)