【发布时间】:2021-04-19 13:13:30
【问题描述】:
我有一个大数据框,其中包含 user_id、user_address 列和多个与用户相关的列(多 10-12 个)和一个小(user_id 和 user_contact 列。每个用户可以有很多电话号码/电子邮件地址。
我正在尝试广播较小的 Dataframe 并将其数据传递给 UDF。但是,我无法获取每个执行程序中存在的所有数据。如果未找到该 user_id 的联系方式,UDF 将返回 No match found。
我尝试通过user_id 过滤broadcastDF,但似乎这不起作用。有人可以在这里指导我吗?
val DF = createDF("/somePath/")
val broadcastedDF = spark.sparkContext.broadcast(DF)
val DFWithUDF = someDF.select( col("user_id),
UDF(col("user_name"),
typedLit[Seq[String]](broadcastedDF.value.filter(broadcastedDF.value("user_id") === col("user_id")).
select("user_contact").
collect().map(data =>
String.valueOf(data.getAs[String]("user_contact")))
)
).alias(SCHEMA_REQUEST_TARGET)
【问题讨论】:
标签: scala apache-spark apache-spark-sql