需要有关使用火花筛选器的帮助



我是Apache Spark的新手,需要帮助在数据帧上形成SQL查询或Spark过滤器。

以下是我的数据的形成方式,即我有大量用户包含以下数据。

{ "User1":"Joey", "Department": ["History","Maths","Geography"] }

我有多个搜索条件,如下所示,其中我需要根据用户定义的运算符搜索数据数组,例如可能是和/或。

{
 "SearchCondition":"1",
 "Operator":"and",
 "Department": ["Maths","Geography"]
}

可以指出如何在火花中实现这一目标的路径吗?

谢谢-千斤顶

我假设你使用Scala并且你已经解析了DataFrame中的数据

val df = spark.read.json(pathToFile)

我会为此使用数据集,因为它们提供类型安全

case class User(department: Array[String], user1: String)
val ds = df.as[User]
def pred(user: User): Boolean = Set("Geography","Maths")subsetOf(user.department.toSet)
ds.filter(pred _)

您可以在此处和此处阅读有关数据集的更多信息。

如果您更喜欢使用数据帧,则可以使用用户定义的函数来执行此操作

import org.apache.spark.sql.functions._
val pred = udf((arr: Seq[String]) => Set("Geography","Maths")subsetOf(arr.toSet))
df.filter(pred($"Department"))

在同一个软件包中,您可以找到一个 spark 内置函数。你可以做

df.filter(array_contains($"Department", "Maths")).filter(array_contains($"Department", "Geography"))

但是有人可能会争辩说,这不是那么有效,优化器无法对其进行大量改进。

请注意,对于每个搜索条件,您需要一个不同的谓词。

相关内容

  • 没有找到相关文章

最新更新