2017-09-14 8 views
1

私は、特定の質問を出して、何時間も解決しようとしていました。別のスパーク/スカラからのトラフ値を反復してデータフレームをフィルタリングする

私は2つのデータフレームを持っています。 {"ANames"、 "description"、 "id"など}

もう1つの(B)列が1つしかない「BName」。それ以来、私はそれを他のタイプに変換すべきであることを知っていますが、何(リスト、シーケンス..)でわかりません。それが私の最初の質問です。

最後に、 "ANames"を通してBの各名前 "BName"を検索(フィルタ)したいと思います。そして、それは名前の一つは、構造を有する別のデータフレームに書き込む見出さワーズ場合:

{BNAME、ID}

をそれが複雑に聞こえます。しかし、実際には、Dataframeでいくつかの言葉を調べるだけです。

編集:「ANames」に複数の名前(例:[John Senna、Bred Ford])が含まれていても、「BName」は含まれていない可能性があります。そして、後で "description"の中の "BName"もそれぞれ検索したいと思っています。

答えて

0

"はarray_contains" 機能を有する2つのデータフレームに参加:

import sqlContext.implicits._ 

val aData = List((Array("John Senna", "Bred Ford"), "Any description", 11), (Array("NoName"), "No description", 12)) 
val bData = List("Bred Ford") 

val aDF = sparkContext.parallelize(aData).toDF("ANames", "description", "id") 
val bDF = sparkContext.parallelize(bData).toDF("BName") 

val result = bDF.join(aDF, expr("array_contains(ANames, BName)"), "inner").select(col("BName"), col("id")) 
result.show(false) 

出力:

+---------+---+ 
|BName |id | 
+---------+---+ 
|Bred Ford|11 | 
+---------+---+ 

同様のアプローチを説明で検索するために後で使用することができます。

+0

ありがとうございました。縫い目が良い。 :) – Puca

+0

expr( "array_contains(ANames、BName)")が私のために機能しませんでした。引用符は内部にあるはずです:array_contains( "ANames"、 "BName") でも、これはうまくいきませんでした。好奇心が強いことがしばしばありました。最初の列では、 "aDF()"で囲んだ場合、列ではなく文字列が必要で、再度取り除くと文字列ではなく列が必要になります。 – Puca

+0

最後に、私は "expr(array_contains())"を削除し、2つの列の間に入れるだけでした。 少なくとも20分後にはエラーなしでまだ実行されています:-D – Puca

関連する問題