您能否帮我弄清楚初始化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并不熟悉,并且在阅读源代码时遇到了麻烦。您能否回答下一个问题:
  • spark-lucenerdd如何索引capitals.parquet?如何索引每列的每一行(所有值)?
  • 我可以设置luceneRDD的分区数量吗?
  • 最佳答案

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

    看一下我准备的幻灯片:

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

    简而言之,LuceneRDD实例化每个Spark执行程序上的反向索引,并将搜索结果从Spark执行程序收集/汇总到Spark驱动程序。 LuceneRDD背后的主要动机是通过全文搜索,地理空间搜索和实体链接来自然扩展Spark的功能,而无需外部依赖SolrCloud或Elasticsearch集群。

    要回答您的问题:

  • 默认情况下,对DataFrame的所有列进行索引。
  • 您可以通过仅对输入DataFrame重新分区来设置分区数,即
  • LuceneRDD(capitals.repartition(numPartitions=10))
    

    09-05 09:39