根据索引 id 的 ArrayList 过滤 JavaRDD

Mas*_*der 2 java-8 apache-spark apache-spark-dataset

我有数据集 df,其内容的索引为 accountid,我也有带 accountid 的数组列表。如何过滤或映射数据集以创建仅包含基于数组列表中的 accountid 内容的新数据集。

我正在使用 Java 8

List<String> accountIdList= new ArrayList<String>();
accountIdList.add("1001");
accountIdList.add("1002");
accountIdList.add("1003");
accountIdList.add("1004");
Dataset<Row> filteredRows=  df.filter(p-> df.col("accountId").equals(accountIdList));
Run Code Online (Sandbox Code Playgroud)

我正在尝试将列表本身传递给比较运算符,您认为这是正确的方法吗

Java 语法是

如果您正在寻找 java 语法

Dataset<Row> filteredRows=  df.where(df.col("accountId").isin(accountIdList.toArray()));
Run Code Online (Sandbox Code Playgroud)

小智 5

使用Column.isin方法:

import scala.collection.JavaConversions;
import static org.apache.spark.sql.functions.*;

Dataset<Row> filteredRows = df.where(col("accountId").isin(
  JavaConversions.asScalaIterator(accountIdList.iterator()).toSeq()
));
Run Code Online (Sandbox Code Playgroud)