需要有关使用 Spark Filter 的帮助
Need help on using Spark Filter
我是 Apache spark 的新手,需要帮助在数据帧上形成 SQL 查询或 spark 过滤器。
以下是我的数据是如何形成的,即我有大量用户包含以下数据。
{ "User1":"Joey", "Department": ["History","Maths","Geography"] }
我有多个搜索条件,如下所示,其中我需要根据用户定义的运算符搜索数据数组,例如可能是和/或。
{
"SearchCondition":"1",
"Operator":"and",
"Department": ["Maths","Geography"]
}
能否指出如何在 spark 中实现这一目标的路径?
谢谢,
-杰克
我假设你使用 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 _)
如果您更喜欢使用 Dataframes,您可以使用用户定义的函数来实现
import org.apache.spark.sql.functions._
val pred = udf((arr: Seq[String]) => Set("Geography","Maths")subsetOf(arr.toSet))
df.filter(pred($"Department"))
同时 package 你可以找到一个 spark 内置函数。你可以做到
df.filter(array_contains($"Department", "Maths")).filter(array_contains($"Department", "Geography"))
但有人可能会争辩说这不是那么有效,优化器也不能改进太多。
请注意,对于每个搜索条件,您需要一个不同的谓词。
我是 Apache spark 的新手,需要帮助在数据帧上形成 SQL 查询或 spark 过滤器。
以下是我的数据是如何形成的,即我有大量用户包含以下数据。
{ "User1":"Joey", "Department": ["History","Maths","Geography"] }
我有多个搜索条件,如下所示,其中我需要根据用户定义的运算符搜索数据数组,例如可能是和/或。
{ "SearchCondition":"1", "Operator":"and", "Department": ["Maths","Geography"] }
能否指出如何在 spark 中实现这一目标的路径?
谢谢, -杰克
我假设你使用 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 _)
如果您更喜欢使用 Dataframes,您可以使用用户定义的函数来实现
import org.apache.spark.sql.functions._
val pred = udf((arr: Seq[String]) => Set("Geography","Maths")subsetOf(arr.toSet))
df.filter(pred($"Department"))
同时 package 你可以找到一个 spark 内置函数。你可以做到
df.filter(array_contains($"Department", "Maths")).filter(array_contains($"Department", "Geography"))
但有人可能会争辩说这不是那么有效,优化器也不能改进太多。
请注意,对于每个搜索条件,您需要一个不同的谓词。