我有一个Spark数据框,需要根据条件进行过滤。
条件是::数据框中有一个列"keyword"
,我需要调用传递此keyword
列值的API。将为所有keyword
列值完成此操作。 API将发回一个我需要与阈值匹配的数字。如果更大,则需要返回true,否则返回false。
为此我写了一个 UDF ,如下所示。
val filteredDf = df.filter(apiUdf(col("keyword_text")) === true))
val apiUdf = udf((topic: String) => {..
.....
HTTP API call ..
parse the result ...
find out the number from the API resposne..
and then compare it with some threshold value and return true/false
这里的问题是,我打开和关闭HTTP连接的次数达到了我有很多关键字的次数。有人可以告诉我如何优化此操作,以及这里的UDF方法是否还可以?
答案 0 :(得分:0)
Spark UDFs
用于处理表示返回值的复杂逻辑。
在分布式数据处理中,调用外部URL的设计/方法执行者不是很好。
我会建议
HTTP API
(不是spark udf)并获得响应现在有了df1(some_id,keyword_text,api_result)
您可以加入df和f1并使用api_result进行过滤。
我不确定,如果HTTP API接受批量/批处理请求(通常大多数会这样做),您可以考虑采用这种方法。