如何在 Spark Table 中创建索引?

Posted

技术标签:

【中文标题】如何在 Spark Table 中创建索引?【英文标题】:How to create index in Spark Table? 【发布时间】:2016-03-20 05:57:33 【问题描述】:

我知道 Spark Sql 与 Hive 几乎相同。

现在我创建了一个表,当我执行 Spark sql 查询来创建表索引时,它总是给我这个错误:

SQL 语句中的错误:AnalysisException:在创建索引语句中输入不匹配的输入 '' 期望 AS 靠近 ')'

我使用的 Spark sql 查询是:

CREATE INDEX word_idx ON TABLE t (id)

id的数据类型是bigint。 在此之前,我也尝试在该表的“word”列上创建表索引,它给了我同样的错误。

那么,有没有办法通过 Spark sql 查询创建索引呢?

【问题讨论】:

【参考方案1】:

真的,没有办法通过 Spark SQL 查询来做到这一点。但是有一个名为zipWithIndexRDD 函数。您可以将DataFrame 转换为RDD,执行zipWithIndex,然后将生成的RDD 转换回DataFrame

请参阅此 community Wiki article 了解完整的解决方案。

另一种方法是使用 Spark MLLib String Indexer

【讨论】:

是的,我在一些RDD上使用了zipWithIndex,但是对于这个,我需要在特定列上创建索引,zipWithIndex不是很方便是的,我需要先分离数据,使用zipWithIndex,然后加入。我想知道是否有更简单的方法。 也许看看mLib StringIndexer? 如果您不需要 ID 是连续的,您可以查看 monotonically_increasing_id()

以上是关于如何在 Spark Table 中创建索引?的主要内容,如果未能解决你的问题,请参考以下文章

确定应该在 DB2 中创建哪些索引以优化特定查询的性能

如何在 Create Table 中创建非聚集索引?

如何使用正则表达式创建索引显示所有字段

如何在数据存储中创建复合索引以过滤实体中的多个属性

Spark中创建DataFrame方法总结

Kibana:在 Lens 中运用多个索引在同一个可视化中创建多个可视化层