次のように私は(簡体字)、「doorsDF」VARのデータフレームを持っている:スパーク:どのように一致するものを見つけるために、異なるデータフレームからネストされたデータを使用する(スカラ)
+-----+-----+-----+------+
| door| x| y| usage|
+-----+-----+-----+------+
| a| 32| 14| 5|
| b| 28| 53| 1|
| c| 65| 94| 23|
| d| 68| 53| 1|
| e| 51| 94| 12|
+-----+-----+-----+------+
と、次のように私は「peopleDF」VARのデータフレームを持っています(簡体字):
+-------+-----+
| person| x|
+-------+-----+
| foo| 30|
| bar| 66|
| Morty| 52|
+-------+-----+
は、トップ3行
私は、人が建物に入るために使用するどのようなドア(複数可)のベースライン「予測」を作りたいを示します。重要なのは、人が5 'x'単位内にいる場合です。
たとえば、fooはドア「a」と「b」を通り抜けます。モルティはドア「c」と「d」を歩くだろう。バーはドア「e」だけを通って歩くだろう。
進歩は、これまで:使用することにより、第2のデータフレームに「潜在的な終了」列を追加しようとしました:
val sequence = doorsDF.select("door").rdd.map(r => r(0)).collect().mkString(",")
val doorColumn = lit(sequence)
peopleDF = peopleDF.withColumn("potentialDoors", doorColumn)
結果(新peopleDF):
+-------+-----+---------------+
| person| x| potentialDoors|
+-------+-----+---------------+
| foo| 30| a,b,c,d,e|
| bar| 66| a,b,c,d,e|
| Morty| 52| a,b,c,d,e|
+-------+-----+---------------+
しかし、今、私がしようとしたとき潜在的なドアをループするためにudfを使用し、その名前を使ってdoorsDFをフィルタリングし、x値をpeopleDFのx値と比較すると、nullpointer例外が発生します。私はそれがネストされた状況でフィルタを使用しようとしているからだと読んだ。
利用可能な機能でこれを行うには、udfやrddに頼っているのではないかもしれませんが、それは私を逃してしまいます。私は長い間それを続けてきました。
また、なぜ私はpotentialDoorsという文字列を(配列とは対照的に)持っていたのかは、私の目的のために扱いやすくなったためです。
ご協力いただきましてありがとうございます。