2016-10-25 139 views
1

我想過濾一個具有類別列的數據幀(List [String])。我想忽略所有具有無效類別的行。他們是無效的,當他們不在model.getCategories通過Array列過濾DataFrame

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: _*)) 

注意 @LostInOverflow做出了重要貢獻,他澄清我的回答,並表示該方法isin在驅動程序實際上是等價的,所以播放列表不會在所有幫助,並更重要的是該名單將被擴展以便被評估。

+0

廣播在這裏沒有效果。 –

+0

打擾一下嗎?我試圖在問題的背景下保留我的答案 –

+1

想想評估的順序。對isin'的爭論在駕駛員中進行了熱烈的評估。它和'lncomingData.filter($「categories」.isin(list))沒有什麼不同' –

1

只需展開列表:

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

注:廣播不會幫助你在這裏。這是在驅動程序上評估的。