私は、Python上でSpark Data Framesを使用して2つのデータフレームに参加するのに苦労しています。私は2つのデータフレームを持っているので、各データフレームごとにユニークにするためにカラムの名前を変更しなければならなかったので、後でどのカラムがどのカラムであるかを知ることができました。私は(firstDfとsecondDfがスパークデータフレームは、関数createDataFrameを使用して作成されている)の列の名前を変更するためにこれをした:Pyspark DataFrame - 変数を使って結合する方法は?
oldColumns = firstDf.schema.names
newColumns = list(map(lambda x: "{}.{}".format('firstDf', x), oldColumns))
firstDf = firstDf.toDF(*newColumns)
私は2番目のデータフレームのためにこれを繰り返しました。それから私は、次のコードを使用して、それらを接続しようとしました:
from pyspark.sql.functions import *
firstColumn = 'firstDf.firstColumn'
secondColumn = 'secondDf.firstColumn'
joinedDF = firstDf.join(secondDf, col(firstColumn) == col(secondColumn), 'inner')
このようにそれを使用して、私は次のエラーを取得する:
AnalysisException "cannot resolve 'firstDf.firstColumn' given input columns: [firstDf.firstColumn, ...];"
これは、列が入力列の配列に存在することを示すためにだけでした。
私は、コードのこの部分を使用してそれらを結合することができるよデータフレームの列に名前を変更しない場合は、次の
joinedDf = firstDf.join(secondDf, firstDf.firstColumn == secondDf.firstColumn, 'inner')
をしかし、これは私のあいまいな列名とデータフレームを与えます。
これにアプローチする方法についてのご意見はありますか?
をエクイするため
はあなたが必要とするすべての列名です合流します返信いただきありがとうございます。特に名前の中にドットを使用しないことに関するヒント。最初のアプローチは機能しますが、2つの結合されたDataFramesの各列に固有の列名を持つように、結合したDataFrameが必要です。示唆されているようにテーブルエイリアスを使用すると、質問に示したのと同じAnalysisExceptionエラーが発生します。 –
うまくいくはずです。完全に再現可能な例のためにテーブル定義を追加しました。 – zero323
申し訳ありませんが、私はちょうどそのドットを変更すると機能することに気付きました。返信ありがとう! –