使用 Spark 执行“WHERE IN”子句,如何仅重新训练第一个数据集的列?

Posted

技术标签:

【中文标题】使用 Spark 执行“WHERE IN”子句,如何仅重新训练第一个数据集的列?【英文标题】:Doing a "WHERE IN" clause with Spark, how may I retrain only the columns of my first dataset? 【发布时间】:2020-10-11 19:04:02 【问题描述】:

我做事正确吗?

我只想保留与communes 中提到的城市相关的mobilite 数据。 我用join 模拟WHERE ... IN ... 子句:这是最好的方法吗?

Dataset<Row> mobilite = this.mobiliteDomicileTravailDataset
   .dsRowFluxDomicileTravailPlusDe15ansAvecEmploi(this.session, 2017);

Dataset<Row> communes = communes(2018);

mobilite = mobilite
  .join(communes, 
        communes.col("codeCommune").equalTo(col("code_commune_origine")), "inner")
  .selectExpr("mobilite.*");

join 操作之后获取的mobilite 数据集内部包含communes 列。这是正常的。但他们对我不感兴趣。但是,我写的内容不起作用并导致错误。

如何快速丢弃它们? 实现我想要的最快的代码是什么?

【问题讨论】:

【参考方案1】:

使用leftsemi加入:

mobilite = mobilite
  .join(communes, 
        communes.col("codeCommune").equalTo(col("code_commune_origine")), "leftsemi")
  .selectExpr("mobilite.*");

【讨论】:

以上是关于使用 Spark 执行“WHERE IN”子句,如何仅重新训练第一个数据集的列?的主要内容,如果未能解决你的问题,请参考以下文章

mysql子查询在where in子句中

Node.JS 仅返回 MySQL“WHERE IN”子句的部分记录

MySQL 不使用带有 WHERE IN 子句的索引?

在 WHERE IN 子句中使用 JSONB 数组中的值

SQL 在 WHERE IN 子句中使用 CASE 语句

在 c# where in 子句适用于整数?