Spark Dataframe 映射函数
Spark Dataframe map function
val df1 = Seq(("Brian", 29, "0-A-1234")).toDF("name", "age", "client-ID")
val df2 = Seq(("1234", 555-5555, "1234 anystreet")).toDF("office-ID", "BusinessNumber", "Address")
我正在尝试 运行 数据帧的每一行上的一个函数(在流中)。此函数将包含 scala 代码和 Spark dataframe api 代码的组合。例如,我想从 df 中获取 3 个特征,并使用它们来过滤名为 df2 的第二个数据帧。我的理解是 UDF 无法完成此操作。现在我的所有过滤代码都可以正常工作,但无法将其应用于 df 的每一行。
我的目标是能够做到
df.select("ID","preferences").map(row => ( //filter df2 using row(0), row(1) and row(3) ))
无法连接数据帧,它们之间没有可连接的关系。
虽然我使用的是 Scala,但 Java 或 Python 中的答案可能没问题。
我也可以使用其他方法来完成此任务。如果我可以将行中的数据提取到单独的变量中(请记住这是流式传输),那也很好。
My understanding is that a UDF can't accomplish this.
是对的,但是map
也不对(local
Datasets
好像是个例外)。像这样的嵌套逻辑只能使用 joins
:
来表达
如果两个 Datasets
都是 streaming
它必须是等值连接。这意味着即使:
The dataframes can't be joined, there is not a joinable relationship between them.
您必须以某种方式推导出一个非常接近 filter
条件的方法。
如果一个 Dataset
不是 streaming
,你可以用 crossJoin
后跟 filter
来暴力破解,但这当然很难推荐。
val df1 = Seq(("Brian", 29, "0-A-1234")).toDF("name", "age", "client-ID")
val df2 = Seq(("1234", 555-5555, "1234 anystreet")).toDF("office-ID", "BusinessNumber", "Address")
我正在尝试 运行 数据帧的每一行上的一个函数(在流中)。此函数将包含 scala 代码和 Spark dataframe api 代码的组合。例如,我想从 df 中获取 3 个特征,并使用它们来过滤名为 df2 的第二个数据帧。我的理解是 UDF 无法完成此操作。现在我的所有过滤代码都可以正常工作,但无法将其应用于 df 的每一行。
我的目标是能够做到
df.select("ID","preferences").map(row => ( //filter df2 using row(0), row(1) and row(3) ))
无法连接数据帧,它们之间没有可连接的关系。
虽然我使用的是 Scala,但 Java 或 Python 中的答案可能没问题。
我也可以使用其他方法来完成此任务。如果我可以将行中的数据提取到单独的变量中(请记住这是流式传输),那也很好。
My understanding is that a UDF can't accomplish this.
是对的,但是map
也不对(local
Datasets
好像是个例外joins
:
如果两个
Datasets
都是streaming
它必须是等值连接。这意味着即使:The dataframes can't be joined, there is not a joinable relationship between them.
您必须以某种方式推导出一个非常接近
filter
条件的方法。如果一个
Dataset
不是streaming
,你可以用crossJoin
后跟filter
来暴力破解,但这当然很难推荐。