Dataset Scala Spark:如果列表中存在列值,如何过滤数据集

问题描述 投票:0回答:1

我正在尝试过滤数据集以查看名字列中的任何名称是否与给定的名称列表匹配。

我有一个包含名字和姓氏的数据集“A”,并且希望有一个类型列表来匹配。我目前有

val namesToTest = List("Madeleine","Sarah");
A.filter("A.forename contains in namesToTest").show()

我得到错误:

mismatched input 'in' expecting {<EOF>, '-'}

感谢任何帮助,我是使用数据集的新手

*(必须是数据集解决方案,不允许在本练习中使用数据框)*

scala apache-spark dataset apache-spark-dataset
1个回答
1
投票

您可以将

filter
Lambda function

一起使用
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions._
val spark = SparkSession.builder().master("local[*]").getOrCreate()
import spark.implicits._

case class Person(forename: String, surname: String)
val namesToTest = List("Madeleine", "Sarah")
// Create original Dataset for testing
val people = Seq(
  Person("John", "Doe"),
  Person("Sarah", "Smith"),
  Person("Alice", "Jones"),
  Person("Madeleine", "Brown")
).toDS()

// Filter with lambda function
val filteredPeople = people.filter(p => namesToTest.contains(p.forename))

filteredPeople.show()

//+---------+-------+
//| forename|surname|
//+---------+-------+
//|    Sarah|  Smith|
//|Madeleine|  Brown|
//+---------+-------+
© www.soinside.com 2019 - 2024. All rights reserved.