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也不对(localDatasets好像是个例外)。像这样的嵌套逻辑只能使用 joins:

来表达
  • 如果两个 Datasets 都是 streaming 它必须是等值连接。这意味着即使:

    The dataframes can't be joined, there is not a joinable relationship between them.

    您必须以某种方式推导出一个非常接近 filter 条件的方法。

  • 如果一个 Dataset 不是 streaming,你可以用 crossJoin 后跟 filter 来暴力破解,但这当然很难推荐。