通过HTTP POST将Spark数据帧作为JSON主体发送的最佳方法

时间:2019-05-24 16:58:53

标签: apache-spark solr apache-spark-sql http-post

我有一个Spark dataframe需要作为HTTP POST请求的正文发送。存储系统为Apache Solr。我们正在通过阅读Spark dataframe集合来创建Solr。我可以使用Jackson库创建JSON并通过HTTP POST发送。此外,数据帧可能具有数百万条记录,因此首选方式是通过batches通过HTTP发送它们。

下面是我能想到的两种方法。

  • 我们可以使用foreach的{​​{1}} / foreachPartition操作并调用Spark dataframe,这意味着将在每个执行器中进行HTTP调用(如果我没记错的话) )。这种方法正确吗?另外,这意味着如果我有3个HTTP POST,那么将可以并行进行3个HTTP调用。对?但是多次打开和关闭HTTP连接,会不会引起问题?

  • 获取executors后,我们可以将其保存在其他Spark dataframe集合中(使用Spark),然后将读取该集合中的数据以使用{{ 1}}(使用SOLR参数),从中创建JSON并通过HTTP请求发送。

我想知道以上两种方法中的哪一种是首选?

1 个答案:

答案 0 :(得分:0)

  

获取Spark数据框后,我们可以将其保存在其他SOLR中   集合(使用Spark),然后该集合中的数据将   读取以使用SOLR API批量获取数据(使用行,开始   参数),从中创建JSON并通过HTTP请求发送。

两种方法中的第二种是最好的,因为您在solrj中具有分页功能 1)将数据框另存为带有索引的Solr文档 2)使用solrj是api,它将与您的solr集合进行交互,并将根据您的条件返回solr文档。 3)您可以使用任何解析器将其转换为json并以ui或用户查询的形式出现。

实际上这不是新方法,将hbase与solr一起使用的人会以相同的方式进行操作(因为从hbase进行查询比从solr集合进行查询的速度确实慢),其中每个hbase表都是solr集合并且可以查询通过solrj并呈现给dashborad,例如angular js。

如下所示的更多说明图。

enter image description here