2016-10-25 15 views
1

カテゴリ(List [String])の列を持つデータフレームをフィルタリングします。私は有効でないカテゴリを持つすべての行を無視したい。彼らはカテゴリがリストではなく、単一の要素であるため、残念ながら私のアプローチは動作しませんmodel.getCategoriesDataFrameを配列でフィルタリングする列

def checkIncomingData(model: Model, incomingData: DataFrame) : DataFrame = { 
    val list = model.getCategories.toList 
    sc.broadcast(list) 
    incomingData.filter(incomingData("categories").isin(list)) 
} 

にないとき、彼らは有効ではありません。それを誰が作っていいのか?

答えて

3

私が見る最初の問題は、ブロードキャストを変数に割り当てなかったことです。

val broadcastList = sc.broadcast(list) 

さらに、broadcastList.valueを使用して参照する必要があります。例えば:

incomingData.filter($"categories".isin(broadcastList.value: _*)) 

NOTE、彼は、私の答えを明らかにし、方法isinが、実際にそう全く役に立たないリストを放送し、ドライバーに評価されていることを言った重要な貢献をした@LostInOverflow とより重要なのは、評価のためにリストを拡張することです。

+0

ブロードキャストはここでは効果がありません。 –

+0

すみません。私は質問の文脈の中で自分の答えを維持しようとした –

+1

評価の順序について考えてみてください。 'isin'の引数は、ドライバで熱心に評価されます。 'lncomingData.filter($" categories ".isin(list))'と違いはありません。 –

1

だけでリストを展開します。

incomingData.filter(incomingData("categories").isin(list: _*)) 

注:放送、ここであなたを助けにはなりません。これはドライバーで評価されます。

関連する問題