2016-11-17 125 views
1

我有一個火花數據幀的 「a」 中包含如下mapply爲SparkRř

C1 | C2 | C3 | C4 
I1 | 12 | 31 | 4 
I2 | 14 | 32 | 13 
I3 | 13 | 33 | 15 
I4 | 16 | 29 | 25 
I5 | 18 | 30 | 73 
I6 | 17 | 36 | 19 

第2列(C2)的報頭是我想與C3比較C4比C3

總是較小和C2與以下邏輯: 如果C4是C2和C3之間然後返回1 否則返回2

並添加此作爲新的列數據幀

當沒有Spark參與時,我可以用mapply來做到這一點。 但是我如何在SparkR中執行此操作?

回答

1

你應該能夠做到這一點只有一個ifelse聲明

df_a <- data.frame(C1 = c('I1', 'I2', 'I3', 'I4', 'I5', 'I6'), 
       C2 = c(12, 14, 13, 16, 18, 17), 
       C3 = c(31, 32, 33, 29, 30, 36), 
       C4 = c(4, 13, 15, 25, 73, 19)) 

a <- as.DataFrame(df_a) 
a$C5 <- ifelse(a$C4 > a$C2 & a$C4 < a$C3, 1, 2) 
head(a) 
    C1 C2 C3 C4 C5 
1 I1 12 31 4 2 
2 I2 14 32 13 2 
3 I3 13 33 15 1 
4 I4 16 29 25 1 
5 I5 18 30 73 2 
6 I6 17 36 19 1 
+0

感謝這解決了我的問題。 – rahram