2016-09-26 5 views
1

bodyTextという名前のツイートと呼ばれるデータフレームsparkRがあります。sparkr dataframe正規表現を使用したカラム別フィルタ

私がしようとしているのは、bodyTextの正規表現条件でデータフレームをフィルタリングすることです。したがって、bodyTextに「集会」や「抗議」があるつぶやきをフィルタリングすることができます。

私がこれまでにしようとしていることは次のとおりです。

subset(twitter_df, grepl("(?<=\\b)rally", twitter_df$bodyText, ignore.case = TRUE)) 
filter(twitter_df, grepl("(?<=\\b)rally", twitter_df$bodyText, ignore.case = TRUE)) 

が、両方のケースで、このエラーが表示されます。

Error in as.character.default(x) : no method for coercing this S4 class to a vector Calls: main ... .local -> [ -> grepl -> as.character -> as.character.default

答えて

0

あなたは、RDDにスパークデータフレームを変換するフィルタを適用して変換することができますそのバック:パラメータperlTRUEまたはトンに設定されている

# setup reproducable sample 
df <- data.frame(id=c(1:4), bodyText=c("rally","protest","text1","text2")) 
head(twitter_df.filtered) 
twitter_df <- as.DataFrame(df) 
head(twitter_df) 


# convert to rdd 
twitter_df.rdd <- SparkR:::toRDD(twitter_df) 
# filter rdd 
twitter_df.rdd.filtered <- SparkR:::filterRDD(twitter_df.rdd, function(s) { grepl("(?<=\\b)rally", s$bodyText, ignore.case = TRUE, perl = TRUE) }) 
# convert to Spark data frame 
twitter_df.filtered <- as.DataFrame(twitter_df.rdd.filtered) 
head(twitter_df.filtered) 

注意彼は表現が無効です。

+0

おかげで非常に多くの作品、。私はas.DataFrameにsqlContextを追加するだけでした: 'as.DataFrame(sqlContext、df)' –

0

あなたがSpark Sql in SparkRを使用している場合、それはのような単純なものでした:

df <- data.frame(id=c(1:4), bodyText=c("rally","protest","text1","text2")) 

createOrReplaceTempView(df, "tweets") 
rallys <- head(sql("SELECT * FROM tweets WHERE bodyText rlike 'rally'")) 

print(rallys) 
関連する問題