我有一个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请求发送。
我想知道以上两种方法中的哪一种是首选?
答案 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。
如下所示的更多说明图。