r - 如何使用 %in% 运算符过滤 Spark Dataframe?
问题描述
我有这个要过滤的数据集:
它包含如下唯一值:
user_unique <- movie_rating %>%
select(userId) %>% distinct() %>% count() %>% collect() %>%
unlist %>% as.vector
movie_unique <- movie_rating %>%
select(movieId) %>% distinct() %>% count() %>% collect() %>%
unlist %>% as.vector
user_unique_vector <- movie_rating %>%
select(userId) %>% distinct() %>% collect() %>%
unlist %>% as.vector
movie_unique_vector <- movie_rating %>%
select(movieId) %>% distinct() %>% collect() %>%
unlist %>% as.vector
然后我想过滤整个 DF,例如前 50 个现有的 movieID
movie_rating %>%
filter(movieId %in% c(movie_unique_vector[1:50]))
但它返回意外错误:
Error: org.apache.spark.sql.catalyst.parser.ParseException:
no viable alternative at input '(`movieId` IN CASE'(line 3, pos 20)
== SQL ==
SELECT *
FROM `movie_rating`
WHERE (`movieId` IN CASE WHEN ((1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50))
THEN ((110, 46850, 147, 46967, 858, 47629, 1221, 48061, 1246, 48516, 1968, 48738, 2762, 48783, 2918, 49530, 2959, 50068, 4226, 50872, 4878, 51540, 5577, 53972, 33794, 54272, 54503,
我该如何过滤这个?
编辑:如果有人对 DF 来源感兴趣,这里是:https://gofile.io/d/6RQvc1
解决方案
考虑使用“join”而不是%in%
(尽管后者对于 R 用户来说可能是自然的)。
- 创建包含前 50 部独特电影的 spark 数据框
- 然后,
inner_join
使用原始 spark 数据帧 (movie_rating
)。
movie_unique_sdf = movie_rating %>%
select(movieId) %>%
distinct() %>%
slice(1:50)
movie_rating %>%
inner_join(movie_unique_sdf, by = "movieId")
推荐阅读
- reactjs - 如何使用 Fluent UI 和 React JS 将自定义样式应用于选择组的选项
- c++ - 在彼此内部使用结构
- javascript - 如何在使用js在顶点图表中加载数据之前将图例放在图表底部?
- python - 使用 Sympy 将变量名中的前缀快速分配到 Matrix 中 - Matlab 示例
- c# - c# firestore - 附加信息:路径不能包含空元素
- c++ - Matlab 和 C++ 之间的 .Net 通信
- java - 使用java在selenium中初始化驱动程序时如何防止null返回
- javascript - 在 highcharts js 中创建图表的问题
- nunit - 如何从 specflow dll 中获取所有场景的列表?
- databricks - 有没有办法在 Databrick 笔记本中的某个单元格之后运行/执行单元格?