Spark Dataframe地图功能

时间:2018-04-13 11:30:10

标签: apache-spark apache-spark-sql spark-dataframe spark-streaming apache-spark-dataset

SELECT a.id, a.name, b.oid, a.address, a.salary
FROM CUSTOMERS a
LEFT JOIN ORDERS b on a.age = b.age
WHERE a.id = '3'

我试图在数据帧的每一行上运行一个函数(在流式传输中)。此函数将包含scala代码和Spark数据帧api代码的组合。例如,我想从df中获取3个特征,并使用它们来过滤名为df2的第二个数据帧。我的理解是UDF无法实现这一目标。现在我的所有过滤代码都运行得很好,没有能力将它应用到df的每一行。

我的目标是能够做类似

的事情
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,但Java或Python的答案可能会很好。

我也可以通过其他方式来实现这一目标。如果我可以将行中的数据提取到单独的变量中(请记住这是流式传输),那也很好。

1 个答案:

答案 0 :(得分:1)

  

我的理解是UDF无法做到这一点。

这是正确的,但maplocal Datasets似乎也不例外Why does this Spark code make NullPointerException?)。像这样的嵌套逻辑只能用joins表示:

  • 如果Datasets streaming都是filter则必须是等同物。这意味着即使:

      

    无法连接数据框,它们之间没有可连接的关系。

    你必须以某种方式推导出一个近似良好Dataset条件的方式。

  • 如果一个streaming不是crossJoin,您可以使用filter后跟{{1}}来强制执行,但当然不建议这样做。