r - sparklyr下的值匹配
问题描述
我尝试在 sparklyr 下使用值匹配:
spark_parquet %>% filter(customer_id %in% spark_unique_customer_ids)
但是,我收到以下错误:
Error in UseMethod("escape") : no applicable method for 'escape' applied to an object of class "c('tbl_spark', 'tbl_sql', 'tbl_lazy', 'tbl')"
任何建议如何解决这个问题?
解决方案
最好使用semi_join
:
spark_parquet <- copy_to(
sc,
tibble(customer_id = c(1, 2, 3), value = c(-1, 0, 1))
)
spark_unique_customer_ids <- copy_to(sc, tibble(customer_id = c(1, 3)))
spark_parquet %>% semi_join(spark_unique_customer_ids, by = "customer_id")
# Source: spark<?> [?? x 2]
customer_id value
* <dbl> <dbl>
1 1 -1
2 3 1
虽然 SQL API 也应该可以工作:
spark_parquet %>% sdf_register("spark_parquet")
spark_unique_customer_ids %>% sdf_register("spark_unique_customer_ids")
sc %>% spark_session() %>%
invoke(
"sql",
"SELECT * FROM spark_parquet
WHERE customer_id IN (
SELECT customer_id FROM spark_unique_customer_ids)") %>%
sdf_register()
# Source: spark<?> [?? x 2]
customer_id value
* <dbl> <dbl>
1 1 -1
2 3 1
推荐阅读
- python - 如何从 Dockerfile 安装 Python 3.7 和 Pip
- c# - 无法让 GetPositionFromPoint 正常工作(WPF、C#)
- sql-server - SQL Server PIVOT 仅返回一行
- github - Github 和 @slbiaslabia – user_session.country_change 国家问题
- macos - Mac终端将用户提升为管理员组,而用户
- swift - 无法打开文件“xxx”,因为目录中没有这样的文件
- javascript - 跨多个组件的可重用模板/html 片段
- netsuite - 销售团队子列表
- python - 将 pandas 移动窗口与列表进行比较,以找到错误最少的窗口
- c# - SignalR 连接不会启动到 IIS 托管的应用程序