Apache spark apache spark筛选器方法中的HTTP API调用

Apache spark apache spark筛选器方法中的HTTP API调用,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,我有一个Spark数据帧,需要根据条件进行过滤 条件是:dataframe中有一个列关键字,我需要调用一个传递该关键字列值的API。要对所有关键字列值执行此操作。API将返回一个我需要与阈值匹配的数字。如果大于,则需要返回true,否则返回false 我为此编写了一个UDF,如下所示 val filteredDf = df.filter(apiUdf(col("keyword_text")) === true)) val apiUdf = udf((topic: String)

我有一个Spark数据帧,需要根据条件进行过滤

条件是:dataframe中有一个列关键字,我需要调用一个传递该关键字列值的API。要对所有关键字列值执行此操作。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连接的次数与我打开和关闭HTTP连接的次数相同。。有人能告诉我如何对此进行优化,以及这里的UDF方法是否合适吗?

Spark UDF旨在处理impl复杂逻辑以返回值

在分布式数据处理中,执行器调用外部URL的设计/方法并不好

它的伸缩性问题与数据的大小和次数有关 连接打开/关闭。 而且,在大多数生产环境中,执行器节点是 不接触互联网。 我建议

保存/收集所有COLU文本 对于每个关键字调用HTTP API not spark udf并获取响应 将数据另存为某些\u id、关键字\u文本、api\u结果 现在使用df1的一些id、关键字文本、api结果

您可以加入df和f1,并使用api_结果进行过滤


我不确定,如果HTTP API需要批量/批处理请求,大多数情况下你会考虑这个方法。

你是否考虑过使用MaultIsType?@ SayySy是指使用MeaTimes代替Milter?不,而不是UDF。类似于df.mapPartitions的东西。。。发送http…筛选器。。。通过回答…我完全同意这样一个事实,即您不能从UDF调用API,因为大多数Executor节点不会暴露于internet。尝试使用id、text_关键字和api输出创建在边缘节点上运行的数据集。使用数据帧连接,然后再次填充结果如果您没有抓住要点,OP向内部服务发送HTTP请求没有问题,问题是如何保持连接的活动性。