Spark LuceneRDD - 它是如何工作的

时间:2017-05-31 10:21:55

标签: java scala apache-spark lucene apache-spark-2.0

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

有一个官方示例here

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 index capitals.parquet怎么样?如何索引每列的每一行(所有值)?
  2. 我可以为luceneRDD设置分区数吗?

1 个答案:

答案 0 :(得分:1)

(免责声明:我是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))