2016-04-26 11 views
0

私は非常に単純な問題だと感じているものを解決しようとしていますが、スパークブードゥーが発生しているかどうかはわかりません。スパーク結合列のヌル値を返す

私は非常に小さい2つのテーブルを持っています。 Table Aは約90K行を有し、Table Bは約2K行を有する。

表Iは私が少し緩んでいた結果表

A B C D E F 
================= 
a1 b1 c1 d1 e1 f1 
a1 b1 c2 d2 e1 f1 
a2 b2 c1 d1 e2 f2 
. 
. 
. 

のように見えるテーブルが欲しい

A B E F 
=========== 
a1 b1 e1 f1 
a2 b2 e2 f2 

A B C D 
=========== 
a1 b1 c1 d1 
a1 b1 c2 d2 
a1 b1 c3 d3 
a2 b2 c1 d1 
a2 b2 c2 d2 
. 
. 
. 

表Bが、アイデアは私がしたいですより多くの行を持つテーブルの行数を減らしてテーブルを結合してください。最終的なテーブルに複数の値を関連付けることもできます。

これは本当に簡単でなければなりません:

table_a.join(table_b, table_a.a == table_b.a, table_a.b == table_b.b).select(..stuff..)

しかし、ほぼすべてのTable A約90Kの行を持っていてから約90Kの行を持つべきである)Result Tableでの結果の値のために、私が手null列の値はEおよびFです。

Table Bの結果を保存すると、すべての列と値が表示されます。 ちょうどTable Aの結果を保存すると、すべての列と値が表示されます。 は奇妙なことは〜89K行、列Result TableEFnull値を持っているにもかかわらず、ランダムに参加しないいくつかの値があるということです

(すなわち私は紙と鉛筆が参加行うことができます)。

何が起こっているのか、どうやってこれを診断できるのか、誰か知っていますか?

+0

ご迷惑をおかけして申し訳ございません。 E列とF列がほとんど空であると言っていますか?もしそうなら、あなたはなぜ彼らも参加してほとんど空であることに驚いていますか?あなたのコードは正しいように見えるので、データの理解が問題のどこにあるのか疑問に思っています。開始するには、Bからの行数をAに結合する(おそらくベースSparkの結合を行うことによって)ことが分かります。 [外部結合または内部結合](http://stackoverflow.com/a/38578/6157047)を期待しているかどうかを検討し、その逆を実行することもできます(結合docstringの "how"引数を参照してください) )。 –

+0

@nightingalen混乱して申し訳ありません。私は 'テーブルA 'と'テーブルB'が完全に人口となっていると言っています。そして、私がそれらに加わると、私が値を持っていると思う列(すなわち、EとF)は 'ヌル 'です。私は 'Table A'の各行に小さなテーブル' Table B'からの行を関連づけたいと思います。いくつかの模擬データフレームで単体テストを実行すると動作しますが、実稼働中に実行するとヌル値が得られます。 – confused

+0

私は参照してください。それから、私が言ったことを言い返してみましょう。どれだけ多くの人が参加しているのかを試してみてください。これは、データが失われた/何かが起こったために不足している値を区別するためにベーススパークで行うことができます。たぶん、いくつかのクリーニングを行うか、別の結合列セットを使用する必要があります。 –

答えて

0

あなたの参加で==の代わりに< =>を試しましたか?

+0

こんにちはMatthew、私はpysparkの代わりの<=>を探しています。私はバージョン1.6のpysparkを使用していて、<=>を使用すると文法エラーが発生します。助けてもらえますか? – orNehPraka

関連する問題