Spark LuceneRDD - 它是如何工作的?

3

您能否帮我弄清楚初始化Spark RDD时会发生什么?

这里有一个官方示例点击这里

val capitals = spark.read.parquet("capitals.parquet").select("name", "country")
val luceneRDD = LuceneRDD(capitals)
val result = luceneRDD.termQuery("name", "ottawa", 10)

但是我对Scala不熟悉,阅读源代码时遇到了麻烦。请您回答以下问题:

  1. spark-lucenerdd如何为capitals.parquet创建索引? 如何为每个列的每一行(所有值)创建索引?
  2. 我可以设置luceneRDD的分区数吗?

@Zouzias,您能看一下这个问题吗? - VB_
(1) 索引是多字段的,即在“名称”和“国家”字段上进行索引。换句话说,您可以在索引后在两个(或每个)字段上执行查询。如果您只想要一个字段被索引,请仅选择一个。(2) 如果要设置LuceneRDD的分区数,可以在输入RDD / DataFrame / Dataset上进行,例如: val luceneRDD = LuceneRDD(capitals.repartition(10)),表示有10个分区。 - Zouzias
1个回答

4

(免责声明:我是LuceneRDD的作者。)

请查看我准备的幻灯片:

https://www.slideshare.net/zouzias/lucenerdd-for-geospatial-search-and-entity-linkage

简单来说,LuceneRDD在每个Spark执行器上实例化一个倒排索引,并从Spark执行器收集/汇总搜索结果到Spark驱动程序。 LuceneRDD的主要动机是本地扩展Spark的功能,实现全文搜索、地理空间搜索和实体链接,而无需外部依赖SolrCloud或Elasticsearch集群。

回答您的问题:

  1. 默认情况下,DataFrame的所有列都已建立索引。
  2. 您可以通过重新分区输入DataFrame来设置分区数,例如:
LuceneRDD(capitals.repartition(numPartitions=10))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接