2017-03-06 88 views
1

我有一個簡單的Spark數據幀字符串,我無法使用stringr軟件包中的str_count函數對其進行過濾。例如:SparkR中的字符串過濾

> library(stringr) 
> df = data.frame(long=c("AA", "BB"), short=c("A", "B")) 
> df 
    long short 
1 AA  A 
2 BB  B 
> sdf = as.DataFrame(df) 
> filter(sdf, str_count(sdf$long, "A") == 2) 
Error in if (length(string) == 0) return(character()) : 
    argument is not interpretable as logical 

我懷疑類型轉換存在一些問題,但我找不到解決方案。 subset函數和「數組選擇」符號也失敗。

在此先感謝

回答

0

首先,爲什麼要創建「sdf」? df已經是一個數據幀,並且您用於聲明sdf的代碼不正確(它應該是「as.data.frame(df)」)

然後,我沒有在過濾器中看到任何錯誤你正在使用的代碼。

+0

SDF是一個Spark數據幀。第一個只是一個正常的R數據幀 – Bunder

1

要將普通的R數據幀轉換爲Spark數據幀,請使用以下代碼行。

sdf <- as.data.frame(df) 

而來到這行代碼

filter(sdf, str_count(sdf$long, "A") == 2) 

str_count(sdf$long, "A") == 2,這條線是完全正常的,並返回c(TRUE, FALSE)

如果你要打印基於上述行數據,我會建議使用這行代碼

sdf[str_count(sdf$long, "A") == 2] 

它給你的輸出(假設這是您的預期結果)

long 
1 AA 
2 BB 

而非filter(sdf, str_count(sdf$long, "A") == 2),因爲在過濾器條件部分不接受邏輯TRUE或FALSE