3

我有一個具有某些分類特徵的數據集。我試圖對Spark框架中的所有這些分類特徵應用完全相同的功能。我的第一個假設是,我可以將每個功能的操作與其他功能的操作並行化。然而,我無法弄清楚它是否可能(在閱讀this,this後感到困惑)。如何使用Spark(Java)並行地在數據集的所有列上應用相同的函數

例如:假設我的數據集如下:

特徵1,特徵2,特徵

藍色,蘋果,蛇

橘,橙,猴

藍,橙,馬

我想分別計算每個功能的每個類別的出現次數。例如,對於特徵1(藍色= 2,橙= 1)

+0

您顯示了輸入數據集。輸出數據集呢?輸出結果如何? –

+0

我想查找每個功能中每個類別的編號。例如:對於功能一輸出是像2,1一樣的數組。但在這裏爲了簡單起見,我寫了類似紅色,藍色的類別。但在我的問題,我會改變每個類別的位表示。例如:在第一個功能我有2個類別(藍色和橙色)。我會用2位來表示它。所以紅色將是10,橙色將是01.然後,我將逐列求和,並且輸出將是11,這意味着1對於藍色1對於橙色。因此,我不能使用像count這樣的正常聚集。我想使用UDF。你能幫我寫一下怎麼寫嗎? –

回答

1

TL; DR火花SQL的DataFrames不是每列,但每行分裂,從而火花處理組每個任務的行(未列),除非你分割源的數據集使用類似select的運算符。

如果你想:

統計每個類別爲每個特徵的出現的次數,分別

只需使用groupBycount(也許join),或使用窗口(與窗口集合函數)。

+0

非常感謝您的回覆。在使用group by之後是否有解決方案來應用我自己的功能?我在https://spark.apache.org/docs/latest/sql-programming-guide.html(Type-Safe User-Defined Aggregate Functions)中找到了一個解決方案。但是,我不確定這是否適合我的情況,實際上我不能真正理解它。你能幫我一下嗎? –

+0

是的。您可以使用UDAF,但我寧願先堅持使用本地聚合函數,只使用UDAF作爲最後的手段。 –

+0

我想查找每個功能中每個類別的編號。例如:對於功能一輸出是像2,1一樣的數組。但在這裏爲了簡單起見,我寫了類似紅色,藍色的類別。但在我的問題,我會改變每個類別的位表示。例如:在第一個功能我有2個類別(藍色和橙色)。我會用2位來表示它。所以紅色將是10,橙色將是01.然後,我將逐列求和,並且輸出將是11,這意味着1對於藍色1對於橙色。因此,我不能使用像count這樣的正常聚集。我想使用UDF。你能幫我嗎? –

相關問題