計數兩次出現和共生我想兩個變量x
和y
,我在一個Spark數據幀,看起來像這樣與計算mutual information(MI):在DF
scala> df.show()
+---+---+
| x| y|
+---+---+
| 0| DO|
| 1| FR|
| 0| MK|
| 0| FR|
| 0| RU|
| 0| TN|
| 0| TN|
| 0| KW|
| 1| RU|
| 0| JP|
| 0| US|
| 0| CL|
| 0| ES|
| 0| KR|
| 0| US|
| 0| IT|
| 0| SE|
| 0| MX|
| 0| CN|
| 1| EE|
+---+---+
在我的情況下, x
恰好是事件是否發生(x = 1
)或不是(x = 0
),而y
是國家代碼,但這些變量可能代表任何事物。爲了計算x
和y
之間的MI我想有通過x, y
雙以下三個附加列編組上述數據框:
- 的
x
- 的
y
出現的次數出現的次數
- 的
x, y
出現在上面的短示例的數目,它看起來像
x, y, count_x, count_y, count_xy
0, FR, 17, 2, 1
1, FR, 3, 2, 1
...
然後,我只需要計算每個x, y
對的互信息項並對它們進行求和。
到目前爲止,我已經能夠按x, y
雙和骨料count(*)
列,但我無法找到一個有效的方式來添加x
和y
計數。我目前的解決方案是將DF轉換爲數組並手動計算出現次數和共同出現次數。它在y
是一個國家時效果很好,但當y
的基數變大時需要永久使用。任何建議,我怎麼能在更多Sparkish方式?
在此先感謝!
感謝您的回答。這個解決方案是我暫時使用的解決方案,但我不確定它是否會推廣到y的基數爲3或更大的情況。粗略地說,它包括明確地製作笛卡爾積(同時考慮'y'只能取兩個值)。我認爲@ z-star提出了一個更全面的答案。 但是,請不要刪除您的答案,它仍然有效,可能對其他用戶有用,其他用戶可能會幫助您改進。 –