首页 > 解决方案 > 使用 Spark 执行“WHERE IN”子句,如何仅重新训练我的第一个数据集的列?

问题描述

我做事正确吗?

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

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.*");

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

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

标签: javaapache-sparkapache-spark-sql

解决方案


使用leftsemi加入:

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

推荐阅读