私は2つのデータフレームを持っていますが、簡単にするために左右に呼び出すことができます。サンプル構造を示します。Spark sql Dataframeは何が起こっているのですか?
DATAFRAMEは "左":(このデータフレームがかなり大きい)
src | dst ------------ b | a c | b a | c
DATAFRAME "右"(このデータフレームはごくわずかです)
loc | name ------------ a | London b | Paris
両方をこれらのデータフレームは、ハイブコンテキストを使用して作成されており、 SQLステートメント
私はすべてを次のように左のデータフレームに参加する実行している場合は正常に動作します:
left.join(right, left("src") === right("loc"), "left_outer")
これは私とのデータフレームを返す
を期待通りに参加する私は実際に行うれるやろうとしています私は全体のスパークジョブが倒れ、以下のようにデータフレームの上にそれを行うしようとすると、次のsrc | dst | src_loc | src_name | dst_loc | dst_name --------------------------------------------------- b | a | b | Paris | a | London c | b | null | null | b | Paris a | c | a | London | null | null
を返すようにしようとして効果のcol1とcol2の両方に一致する、それは、Dエラーはありませんが、時間がかかりすぎるか、何かが起こっていることが分かりません。欲求不満のうち
val dfjoin1 = left.join(right, left("src") === right("loc"), "left_outer")
dfjoin1.join(right, dfjoin1("dst") === right("loc"), "left_outer")
私は、第二の同一のハイブのクエリから
次作品を新しいものを作成するには、むしろ右のデータフレームを再利用するよりも試みたが、私には非常に間違っているようだ(呼び出す必要はありません二度同じデータ用ハイブ)
val right = hiveContext.sql(FROM .....)
val right2 = hiveContext.sql(FROM .....)
val dfjoin1 = left.join(right, left("src") === right("loc"), "left_outer")
dfjoin1.join(right2, dfjoin1("dst") === right2("loc"), "left_outer")
私が持っているのext問題は、私は引数のために、追加された列でフィルタリングしたいということですが、SRCのLOC名がどこにあるか、私はすべてのものを取得したいと言うことができますパリ。
dfjoin1.filter($"name" === "Paris")
これはあいまいな列名のために失敗します。この問題をどうやって解決するのですか?結合の一部として名前の列に簡単に接頭辞を付けることはできますか?
は内のすべての列を先頭に付加するどのような方法があるでしょう参加または私は必要ですかすべての列でwithColumnRenamedを実行するには?私は右のテーブルに約60列の名前を持つことを意味するリネームステートメントが少し残っているようですが、私は必要かもしれないと思います。 –
私は参照してください - 編集された回答を参照してください(別の追加) –
ブリリアント、ありがとう –